PLINQ与LINQ:LINQ的OutOfMemoryException而不是PLINQ

时间:2011-11-10 00:26:38

标签: c# .net multithreading linq plinq

这是一个有趣的问题。首先是设置:

  • 8GB RAM
  • Windows 7 Pro x64
  • VS2010 Ultimate

我有一个内存密集型算法,使用LINQ / PLINQ来处理数据。最初的实施依赖于PLINQ。单元测试成功。但是,在尝试查看使用PLINQ与LINQ获得的性能优势时,同样的测试在禁用并行性时会因OutOfMemoryException而失败。

有没有合理的解释?我可以不断重现这一点。我没有检查,但是我可能没有内存但是一些资源而不是根据线程模型分配不同?想法?

1 个答案:

答案 0 :(得分:3)

.net中的单个对象限制为2 GB,即使在64位上也是如此。如果你没有使用PLINQ我会猜测某个对象(例如,一个List)变得超过2千兆字节然后崩溃。使用PLINQ - 因为它分割了它的工作 - 我猜它会创建多个低于2 GB的列表。

请发布一些代码,没有它就不可能提供任何细节。