相关疑难解决方法(0)

如何避免OrderBy - 内存使用问题

假设我们有一个大的点列表List<Point> pointList(已经存储在内存中),其中每个点都Point包含X,Y和Z坐标.

现在,我想选择N%的点,其中存储的所有点的Z值最大pointList.现在我这样做:

N = 0.05; // selecting only 5% of points
double cutoffValue = pointList
    .OrderBy(p=> p.Z) // First bottleneck - creates sorted copy of all data
    .ElementAt((int) pointList.Count * (1 - N)).Z;

List<Point> selectedPoints = pointList.Where(p => p.Z >= cutoffValue).ToList();
Run Code Online (Sandbox Code Playgroud)

但我有两个内存使用瓶颈:首先是在OrderBy期间(更重要),第二是在选择点时(这不太重要,因为我们通常只想选择少量的点).

是否有任何方法可以用更少内存的东西替换OrderBy(或者可能是其他方式找到这个截止点)?

这个问题非常重要,因为LINQ会复制整个数据集,对于我正在处理的大文件,它有时会达到几百MB.

c# linq memory sql-order-by

18
推荐指数
2
解决办法
2821
查看次数

标签 统计

c# ×1

linq ×1

memory ×1

sql-order-by ×1