【发布时间】:2015-12-12 02:19:40
【问题描述】:
我有几个通用列表,一个包含 70,000 多个项目,另一个包含 10 个项目。与第一个列表进行比较时,我必须找出第二个列表中不存在的项目。从逻辑上讲,我的代码运行良好,并且使用较小的列表集我不会遇到任何严重的性能问题。由于我的第一个列表超过 70K 项目,我面临着严重的性能问题。执行并获得结果需要大量时间。
我的问题是?有没有更好的方法来做到这一点?我无法忍受这个性能问题。有什么改进建议吗?我正在使用 C#、.NET 3.5
List<Employee> existingEmployeeList = List of 70K employees;
List<Employee> validEmployeeList = List of 10 employees;
var emloyeeDeletedFilterList = existingEmployeeList.Where(m => !validEmployeeList.Any(p => p.EmployeeId == m.EmployeeId
&& p.FirstName == m.FirstName
&& p.Age == m.Age
&& p.LastName == m.LastName));
我还有另一个操作要查找新添加到列表中的操作。
var emloyeeAddedFilterList = validEmployeeList.Where(m => !existingEmployeeList.Any(p => p.EmployeeId == m.EmployeeId
&& p.FirstName == m.FirstName
&& p.Age == m.Age
&& p.LastName == m.LastName));
我在 where 子句中有 4 个条件来过滤员工列表。
编辑了我的问题:又添加了一个代码 sn-p
【问题讨论】:
-
如果您重新安排条件以从最严格到最不严格的条件进行检查,您应该能够加快速度。由于 70K 员工中的大多数都将通过
!validEmployeeList.Any过滤器,因此您不妨将其放在条件的末尾。 -
Employee实体的主键是什么?不要因为使用 EF 而忘记数据库基础知识。 :) .
标签: c# linq lambda .net-3.5 generic-list