【发布时间】:2017-08-01 02:24:51
【问题描述】:
首先,我构建了一个包含大约 12,000 个对象的列表(通过读取现有文件),如下所示:
public class Operator
{
string identifier; //i.e "7/1/2017 MN01 Day"
string name1;
string name2;
string id1;
string id2;
}
标识符在列表中是唯一的。
接下来我运行一个大型查询(目前大约有 400 万行,但它可能高达 1000 万行和大约 20 列)。然后我使用写入流将所有这些逐行写入 CSV。对于每一行,我都会遍历 Operator 列表以查找匹配项并添加这些列。
我遇到的问题是性能。我预计此报告需要很长时间才能运行,但我确定文件写入步骤花费的时间特别长(大约 4 小时)。我怀疑这与循环 Operator 列表 400 万次有关。
有什么办法可以提高这个速度吗?也许通过在我最初构建列表时做一些事情(可能是索引或排序),这将使搜索完成得更快。
【问题讨论】:
-
“我将所有这些都写入 CSV”向我们展示您的代码
-
如果文件写入步骤花费了这么长时间,那可能是值得展示的代码......
-
创建以标识符为键的运算符实例字典也可以加快查找匹配的速度。
-
创建字典。要在 N 上找到匹配项,遍历每个项目将平均进行 N/2 次搜索。使用带有二进制散列的字典,搜索时间减少到 log2(N)。因此,您的搜索时间从 4,000,000/2 (2,000,000) 减少到 22。
-
您绝对可以根据您需要从数据库结果中比较的任何内容将 12,000 个对象放入
Dictionary或Lookup来加速循环,但我保证 IO(都检索从数据库中写入文件)将使循环超过 12,000 个项目所需的时间相形见绌。
标签: c#