C# 如何对大量数据(800k记录)进行多次解析?
我有一个验证特定CSV文件的桌面应用程序。 我得到了这个CSV文件,我需要根据多个业务规则对其进行解析和验证。这些业务规则可以特别适用于每个记录,也可以检查与文件中所有记录相关的范围的集成绑定。该文件大约有800k条记录长 以下是我目前如何处理这个问题:C# 如何对大量数据(800k记录)进行多次解析?,c#,.net,large-data,C#,.net,Large Data,我有一个验证特定CSV文件的桌面应用程序。 我得到了这个CSV文件,我需要根据多个业务规则对其进行解析和验证。这些业务规则可以特别适用于每个记录,也可以检查与文件中所有记录相关的范围的集成绑定。该文件大约有800k条记录长 以下是我目前如何处理这个问题: 我上传csv文件,并将每一行转换为一个自定义对象(此处使用for循环),最终存储在列表中。这一点通常需要3到6秒,所以我不认为这是个问题。 我将列表传递给一个验证器类,由于StructureMap,它将所有业务规则作为单独的类来获取 我反复浏览
var mandatoryFields = GetFieldsWithAttribute<MandaroryFieldAttribute>(package);
foreach (var field in mandatoryFields)
{
var fieldValue = field.GetValue(package, null).ToString();
if (!string.IsNullOrWhiteSpace(fieldValue))
continue;
var errorMessage = GetErrorMessage(package.RowNumber, field.Name,
field.GetAttributeForPackage<CsvFieldNameAttribute>().Name);
if (FailedResults.Contains(errorMessage))
continue;
FailedResults.Add(errorMessage);
}
var mandatoryFields=GetFieldsWithAttribute(包);
foreach(mandatoryFields中的变量字段)
{
var fieldValue=field.GetValue(包,null).ToString();
如果(!string.IsNullOrWhiteSpace(fieldValue))
继续;
var errorMessage=GetErrorMessage(package.RowNumber,field.Name,
field.GetAttributeForPackage().Name);
if(FailedResults.Contains(errorMessage))
继续;
FailedResults.Add(错误消息);
}
因为有很多字段-我决定使用自定义属性验证字段,以使流程更通用。反射在两个扩展方法中使用:GetAttributeForPackage和GetFieldsWithAttribute
我没有解析大量数据的经验。有人能建议一种方法来处理这个问题吗?有几件事可以帮助你:
- 既然你有大文件,我建议你用 。这使程序员能够处理非常大的文件 <>因为你有大量的记录要验证,你可以考虑使用 线程或并行编程(任务)。这样执行将 快点 我猜您正在使用StreamReader.ReadLine来阅读 线路