我使用linq来对象,我发现.ToList和.ToArray操作阻塞了线程。 (在性能报告中,我看到阻塞的时间。)我想这是因为GC在我调用tolist或toarray时试图分配内存。这很糟糕,因为我在并行循环中使用linq,我希望访问linq中的一些共享集合。 有没有办法解决这个问题,除非不使用linq来对象?
答案 0 :(得分:3)
调用ToList
或ToArray
会导致查询立即得到评估 - 这将阻止调用它们的线程,直到评估完整个集合并返回查询结果。
你应该直接迭代查询而不调用任何一种方法 - 这会将结果流式传输(假设没有其他急切的评估发生)。
如果您需要同时工作,我建议您查看Task Parallel Library(TPL)。