升级到DotNet 4.5后,一个查询开始给我OutOfMemoryExceptions。
(提炼)查询是:
var tests = new int[]{}
.AsParallel()
.GroupBy(_ => _)
.Take(int.MaxValue)
.ToArray();
我发布此问题给任何有相同问题的人。我将在下面回答。
答案 0 :(得分:7)
这似乎是框架的变化。
Take()运算符在TakeOrSkipQueryOperator内部类中实现。代码中有一个分支通过WrapHelper()函数创建一个FixedMapHeap实例,该实例又创建了一个Key元素数组,该元素的大小最初传递给Take()(在给定的示例中,它将是一个8Gb的数组) )。