Skip to main content
 首页 » 编程设计

c#之大集合和 OrderBy 的 OutOfMemoryException

2024年01月25日26webabcd

我有一个 trends 集合,其中包含大约 30kk 个元素。当我尝试在 linqpad 中执行以下代码时

trends.Take(count).Dump(); 

它工作正常。

但是如果我添加排序:

 trends.OrderByDescending(x => x.Item2).Take(count).Dump(); 

我得到 System.OutOfMemoryException

我做错了什么?

请您参考如下方法:

OrderByDescending(或 OrderBy)在您尝试获取第一个元素时具体化整个序列 - 它必须这样做,否则您不可能知道第一个元素.它必须制作序列的副本(当然,通常只是一堆引用)才能排序,因此如果原始序列是内存中的集合,您最终会得到两个副本它的。大概你没有足够的内存。