c# - PLINQ 与 LINQ : OutOfMemoryException for LINQ but not PLINQ

标签 c# .net multithreading linq plinq

这是一个有趣的事情。首先进行设置:

  • 8GB 内存
  • Windows 7 专业版 x64
  • VS2010旗舰版

我有一个内存密集型算法,可以使用 LINQ/PLINQ 处理数据。最初的实现依赖于 PLINQ。单元测试成功。但值得注意的是,在尝试查看使用 PLINQ 与 LINQ 相比获得了哪些性能优势时,当禁用并行性时,相同的测试会失败并出现 OutOfMemoryException。

有什么合理的解释吗?我可以始终如一地重现这一点。我没有检查,但我是否可能耗尽的不是内存,而是一些根据线程模型分配不同的资源?有想法吗?

最佳答案

.net 中的单个对象限制为 2 GB,即使在 64 位上也是如此。如果您不使用 PLINQ,我会猜测某些对象(例如列表)变得大于 2 GB,从而崩溃。使用 PLINQ - 因为它分割了它的工作 - 我猜测它会创建多个小于 2 GB 的列表。

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

关于c# - PLINQ 与 LINQ : OutOfMemoryException for LINQ but not PLINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8073625/

相关文章:

C# 事件处理程序 : when are the subscribers invoked?

c# - Twitter OAuth 请求 token 返回未授权

javascript -\n 和\t 并使用 javascript 或 .net 让它们显示在 <textarea> 中

.net - 文本数据最快的哈希算法

c# - 使用 C# 从 TCP 流中解析串联的、非定界的 XML 消息

java - 进程间同步?

java - 多线程程序输出不符合预期

c# - 如何反转 foreach 中的列表?

c - SDL2 会自动创建线程吗?

C# 类类型转换