这比我想象的更加困难。基本上,每天系统都会将客户主列表的快照转储为CSV格式。它包含大约120,000条记录和60个字段。大小约为25MB。不管怎样,我想报告在一个快照和另一个快照之间发生变化的值。这不是计划文件差异,因为它必须匹配最左边的列值,其中包含客户的唯一编号。行可以被插入/删除等。所有字段都是字符串,包括参考号。
我已经用LINQ编写了一个解决方案,但处理更大的数据集时会死机。对于10000条记录,需要17秒。对于120000条记录,需要近2小时来比较两个文件。现在它使用了优秀且免费的“filehelpers”http://www.filehelpers.com/ 来加载数据,这只需要几秒钟,但检测哪些记录已更改则更加棘手。以下是需要花费2小时的查询:
我应该采用什么方法?我想立即将列表“修剪”到某种变化的那些人,然后对这个小子集应用更具体的比较。我的一些想法是:
a)使用字典或哈希集-尽管早期测试并没有真正显示出改进。
b)将操作分隔开-使用客户参考字段中的第一个字符,并仅与具有相同字符的人匹配。虽然这可能需要创建许多单独的集合,但似乎相当不雅。
c)远离类型化数据排列,并使用数组完成。同样,好处未知。
有什么想法吗?
谢谢!
我已经用LINQ编写了一个解决方案,但处理更大的数据集时会死机。对于10000条记录,需要17秒。对于120000条记录,需要近2小时来比较两个文件。现在它使用了优秀且免费的“filehelpers”http://www.filehelpers.com/ 来加载数据,这只需要几秒钟,但检测哪些记录已更改则更加棘手。以下是需要花费2小时的查询:
var changednames = from f in fffiltered
from s in sffiltered
where f.CustomerRef == s.CustomerRef &&
f.Customer_Name != s.Customer_Name
select new { f, s };
我应该采用什么方法?我想立即将列表“修剪”到某种变化的那些人,然后对这个小子集应用更具体的比较。我的一些想法是:
a)使用字典或哈希集-尽管早期测试并没有真正显示出改进。
b)将操作分隔开-使用客户参考字段中的第一个字符,并仅与具有相同字符的人匹配。虽然这可能需要创建许多单独的集合,但似乎相当不雅。
c)远离类型化数据排列,并使用数组完成。同样,好处未知。
有什么想法吗?
谢谢!