【发布时间】:2014-06-22 14:57:42
【问题描述】:
我正在处理大量数据对象,我需要能够根据 csv 标头映射将它们转换为文本文件。标题映射基本上是需要按特定顺序打印的字段列表,例如如果 header map 是:ID、Name、Location 等,那么所有对象的这三个字段都需要写入 csv 文件。
问题在于对象列表可能以百万计,而标题映射中可能有数百个字段名 - 这些字段名始终是对象中的有效字段名。目前,我正在使用的代码迭代整个对象列表,并在所有 csv 值的映射上使用 switch 语句来打印出所需的字段。代码如下所示:
foreach (Object o in Objects)
{
foreach (String FieldName in CsvFieldsList)
{
switch (FieldName)
{
case "ID":
//Do something for this specific ID:
outString.Append(o.ID);
break;
....
....
}
}
}
AFAIK,C# 将为字符串 switch 语句使用字典,因此这些语句应该很快,但是,对于我们的一些大型数据集,此代码需要数小时,我想知道是否有可能改进此设计。
【问题讨论】:
-
也许this 的帖子会有所帮助。解释提高性能的方法。
-
你对foreach循环中的o对象做了什么?
-
对象具有不同类型的属性,即字符串、整数、布尔值等,我们将它们转换为字符串表示法。请注意,其中一些属性需要额外的处理。我还更新了代码,让您了解典型(不是全部)开关盒的外观。
-
您的运行时间为
O(m * n),其中 m 是 Objects.Count,n 是 CsvFieldsList.Count。如果您可以将 Objects 和 CsvFieldsList 放入字典并通过查找检索数据,那么您应该能够获得O(m + n)的运行时间 -
我的理解是 C# switch 语句使用字典来处理大量的字符串情况。我不确定手动使用字典是否会产生明显的效果。
标签: c# performance algorithm dataset bigdata