将linq对象阻塞线程?

时间:2011-10-21 20:28:39

标签: .net linq concurrency linq-to-objects

我使用linq来对象,我发现.ToList和.ToArray操作阻塞了线程。 (在性能报告中,我看到阻塞的时间。)我想这是因为GC在我调用tolist或toarray时试图分配内存。这很糟糕,因为我在并行循环中使用linq,我希望访问linq中的一些共享集合。 有没有办法解决这个问题,除非不使用linq来对象?

1 个答案:

答案 0 :(得分:3)

调用ToListToArray会导致查询立即得到评估 - 这将阻止调用它们的线程,直到评估完整个集合并返回查询结果。

你应该直接迭代查询而不调用任何一种方法 - 这会将结果流式传输(假设没有其他急切的评估发生)。

如果您需要同时工作,我建议您查看Task Parallel Library(TPL)。