c# - 将 List<T> 设置为 linq 查询结果导致超时

标签 c# linq generics

我有一个扩展方法,它接受两个列表并比较它们的修改,然后输出一个新列表。这是代码

public static List<Member> GetModifiedRecords(this List<Member> LocalMemberData, List<Member> RemoteMemberData)
    {
        var result = (from localdata in LocalMemberData
                      from remotedata in RemoteMemberData
                      where
                      ((
                      localdata.Card != remotedata.Card ||
                      localdata.DateJoined != remotedata.DateJoined ||
                      localdata.DatePaidUpTo != remotedata.DatePaidUpTo ||
                      localdata.Forename != remotedata.Forename ||
                      localdata.Postcode != remotedata.Postcode ||
                      localdata.State != remotedata.State ||
                      localdata.Street != remotedata.Street ||
                      localdata.Surname != remotedata.Surname ||
                      localdata.Title != remotedata.Title ||
                      localdata.Town != remotedata.Town
                      )
                      && (localdata.MemberNumber == remotedata.MemberNumber
                      ))
                      select localdata).Distinct();

        List<Member> modifiedMembers = new List<Member>(result);
        return modifiedMembers;
    } 

奇怪的是在线上运行时失败

List<Member> modifiedMembers = new List<Member>(result);

有错误

“CLR 在 60 秒内无法从 COM 上下文 0x3b4668 转换到 COM 上下文 0x3b44f8。拥有目标上下文/单元的线程很可能正在执行非泵等待或处理非常长时间运行的操作而不进行泵Windows 消息。这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随时间不断累积。为避免此问题,所有单线程单元 (STA) 线程都应使用泵等待原语(例如CoWaitForMultipleHandles)并在长时间运行的操作中定期发送消息。”

仅供引用,正在比较的两个列表都有超过 100,000 条记录。我在想这个错误吗?

最佳答案

如果我理解正确,您的 LINQ 查询会将每个列表中的每个元素与另一个列表中的每个元素进行比较。这意味着 100,000 x 100,000 次比较。那是 10 亿次比较,很多。

关于c# - 将 List<T> 设置为 linq 查询结果导致超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7265149/

相关文章:

c# - AutoMapper 和继承 - 如何映射?

c# - 检查 T 是否为 IEnumerable

c# - 不能在此范围内声明局部变量[Linq/Lambda 表达式]

java - Set 类型不是通用的;它不能用参数 <K> 参数化

java - 为什么 Java 泛型不能实现接口(interface)?

c# - 如何在 C# 中将特定类型的列表转换为泛型类型的列表

c# - 在 EPPlus 中编写 Excel 文件

c# - 如何使用 C# SDK 访问与我共享的 Box 文件夹

c# - LINQ 方法语法 - 如何完成动态 Linq 语句

c# - Linq 列表比较和排除