【发布时间】:2017-12-13 11:09:25
【问题描述】:
我有两个大列表,我需要了解它们之间的差异。
第一个列表来自另一个系统通过 web 服务,第二个列表来自数据库(数据的命运)。
我将从第一个列表中比较并获取第二个列表中没有的项目并插入到数据库中(第二个列表源)。
还有其他性能最佳的解决方案吗?
使用List.Any(),这个过程需要很多小时并且没有完成......
使用for循环,这个过程需要10个小时或更长时间。
每个列表有 1.300.000 条记录
newItensForInsert = List1.Where(item1 => !List2.Any(item2 => item1.prop1 == item2.prop1 && item1.prop2 == item2.prop2)).ToList();
//or
for (int i = 0; i < List1.Count; i++)
{
if (!List2.Any(x => x.prop1 == List1[i].prop1 && x.prop2 == List1[i].prop2))
{
ListForInsert.Add(List1[i]);
}
}
//or
ListForInsert = List1.AsParallel().Except(List2.AsParallel(), IEqualityComparer).ToList();
【问题讨论】:
-
你能告诉我们你的代码吗?
-
您的列表有多大?适合您 RAM 的东西绝不应该花费“数小时”才能发现它与另一个对象相同。
-
显示您的代码或发布MCV 示例以便我们更好地理解。
-
多大是多大?让我们知道这两个列表的计数是多少。这实际上很重要。您正在使用一种非常幼稚、简单的方法,只使用一个线程。当然,这需要几个小时......!!!此外,列表本身的性质也很重要。比较方式会根据它们是否严格正交而有所不同。
-
已添加代码,请参阅
标签: c# performance list linq loops