以下过程(解释如下)适用于非常小的列表,但当列表包含大量项目(1/2 百万)时,应用程序进入“未响应”状态,大约需要 2.5 分钟才能完成(非常糟糕的时间)。 我可能会添加应用程序需要处理 1 亿个项目的列表 至少(最终)。
这里是有问题的程序的代码:
public void removeItems(List<long> L, SortedList<long, List<long>> _subLists)
{
foreach (KeyValuePair<long, List<long>> kvp in _subLists)
{
foreach (long duplicate in kvp.Value)
{
int j = L.IndexOf(duplicate);
L.RemoveRange(j,(int)kvp.Key);
}
}
}
L 是长值列表。 _subLists 是一个排序列表,其中每个值都是一个列表 L 的值,开始一些差异(不相关)的等差级数。 与该值关联的键是值包含的系列的长度。
例子:
L = {1,2,3,5,6,7,18,20,21} _subLists = {2,<20>} {3,<1,5>}
该过程只是从 L 中删除等差级数。
最佳答案
此过程在大 O 表示法中的运行时间为 n^2,这是相当慢的,如果其中一个列表有 1 亿个条目,您可以预期运行时间会很慢。这里没有堆栈溢出问题,只是遍历这么多数据很慢。我真的没有在这里看到一个问题,你想让它更快吗?如果是这样,嵌套的 for 循环肯定是问题所在。
关于c# - 有趣的是,这可能是一个堆栈溢出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/848490/