gpt4 book ai didi

c# - 内存优化的 OrderBy 和 Take?

转载 作者:太空狗 更新时间:2023-10-29 23:10:38 26 4
gpt4 key购买 nike

我有 9 GB 的数据,我只需要 10 行。当我这样做时:

 data.OrderBy(datum => datum.Column1)
.Take(10)
.ToArray();

我得到一个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());

这样一来,并不是所有的项目都需要保存在一个新的排序集合中,只有您感兴趣的最好的 10 个。

这是最少的代码方式。由于您知道 soFar 列表已排序,因此可以优化插入 current 的位置/是否插入的测试。我不想为你做所有的工作。 ;-)

PS:将 T 替换为您的类型。

编辑:考虑一下,最有效的方法实际上是一个普通的旧 foreach,它将每个项目与最佳 10 的运行列表进行比较。

关于c# - 内存优化的 OrderBy 和 Take?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6076316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com