【问题标题】:Speeding up list search and inserts in c#加快 C# 中的列表搜索和插入
【发布时间】:2012-11-28 03:25:24
【问题描述】:

我有一个旧版应用程序,它曾经使用较小的数据集。

目前我们正在扩展它以在更大的数据集上运行(是的,它总是运行良好)。

所以现在我有了这段代码。 sValues 是一个包含 2100 万(是)项的列表。 sProcessedStatus 是一个匹配列表,指示我们是否要使用它(即不是-1 或-2),如果是,我们将它们添加到groupSourceVals。但是我们只添加唯一值,因此是 indexOf() 检查。

for (int p = 0; p < sValues.Count; p++)
{
  int currentProcessed = sProcessedStatus[p];
  if ((!(currentProcessed == -1)) && (!(currentProcessed == -2)))
  {
    if (groupSourceVals.IndexOf(sValues[p]) == -1)
    {
      groupSourceVals.Add(sValues[p]);
    }
  }
  else
  {
    Console.WriteLine("Dropping non-processed value " + sValues[p]);
  }
}

但是,在 64 位四核机器上,几天后它仍然严重运行。除了多线程吸盘之外,我还缺少任何关于加速它的理论吗? IndexOf 是否非常缓慢,是否有更好的选择?

【问题讨论】:

  • 您使用这么大的数据集而不使用 SQL 数据库有什么原因吗?
  • sValues里面有什么,列表排序了吗?
  • 为什么状态和值在不同的集合中?它们可能应该是具有 status 和 value 属性的自定义类型的单个集合。
  • @Servy - 旧版。可能应该是,但生活就是这样。
  • @fastreload - 没有排序不,是各种字符串数据。

标签: c# performance list optimization


【解决方案1】:

使用 HashSet&lt;T&gt;.Contains 进行快速 O(1) 存在性检查。要么只使用HashSet,要么同时维护ListHashSet 并保持它们同步。

【讨论】:

  • 幸好它跑得更快了。与估计的 18 天相比,几秒钟。我很乐意接受,谢谢。
猜你喜欢
  • 2017-05-10
  • 1970-01-01
  • 2014-03-03
  • 2015-11-10
  • 2014-10-18
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多