c# - 大集合和 OrderBy 的 OutOfMemoryException?

标签 c# .net out-of-memory

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

trends.Take(count).Dump();

它工作正常。

但是如果我添加排序:

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

我得到 System.OutOfMemoryException

我做错了什么?

最佳答案

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

关于c# - 大集合和 OrderBy 的 OutOfMemoryException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11172242/

相关文章:

c# - 如何更改类的构造函数以接收已创建的类和构造函数的对象的通用列表? (C#)

c# - 从数据库中检查字符串值

c# - 可以指定使用 delegate.BeginInvoke 时运行 AsyncCallback 的线程吗?

c# - 用于 OneCode C# 实现的 Twilio Authy 2FA

c# - 导出大量数据

c++ - cv::内存位置出现异常错误

C# + N单元 : Unit testing methods with byte array arguments

C# 数组子集获取

c# - 为什么我的 .NET Standard 2.0(多目标)项目对依赖程序集之一发出警告?

java - 将 17MB 文本文件解析为 List 如何导致 128MB 堆内存不足?