6

在我升级到 DotNet 4.5 后,一个查询开始给我 OutOfMemoryExceptions。

(蒸馏)查询是:

var tests = new int[]{}
    .AsParallel()
    .GroupBy(_ => _)
    .Take(int.MaxValue)
    .ToArray();

我为任何有同样问题的人发布这个。下面我来回答。

4

1 回答 1

7

这似乎是框架的变化。

Take() 运算符在 TakeOrSkipQueryOperator 内部类中实现。代码中有一个分支通过 WrapHelper() 函数,该函数创建一个 FixedMapHeap 实例,该实例又创建一个大小最初传递给 Take() 的 Key 元素数组(在给定示例中将是一个 8Gb 的数组)。

于 2012-08-16T20:54:39.723 回答