我有一个扩展方法,它接受两个列表并比较它们的修改,然后输出一个新列表。这是代码
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/