Jad*_*ias 5 .net c# linq memory out-of-memory
我有9 GB的数据,我只想要10行.当我做:
data.OrderBy(datum => datum.Column1)
.Take(10)
.ToArray();
Run Code Online (Sandbox Code Playgroud)
我得到了OutOfMemoryException.我想使用一种OrderByAndTake方法,针对较低的内存消耗进行了优化.这很容易写,但我想有人已经这样做了.我在哪里可以找到它.
编辑:这是Linq-to-objects.数据来自文件.如果每个行的值Column1小于当前10个最大值的列表,则可以丢弃每一行.
我假设您在 Linq to Objects 中执行此操作。你可以做类似的事情...
var best = data
.Aggregate(new List<T>(), (soFar, current) => soFar
.Concat(new [] { current })
.OrderBy(datum => datum.Column1)
.Take(10)
.ToList());
Run Code Online (Sandbox Code Playgroud)
这样,并非所有项目都需要保留在新的排序集合中,只需保留您感兴趣的最佳 10 个项目即可。
这是代码最少的方式。由于您知道列表已排序,因此可以优化soFar测试插入位置/是否插入的情况。current我不想为你做所有的工作。;-)
PS:替换T为您的类型。
编辑:想想看,最有效的方法实际上是一个简单的旧方法foreach,将每个项目与最佳 10 个项目的运行列表进行比较。