加快列表搜索并插入c#

时间:2012-11-27 19:21:49

标签: c# performance list optimization

我有一个曾经使用过小型(呃)数据集的遗留应用。

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

所以现在我有了这段代码。 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是否大幅放缓,是否有更好的选择?

1 个答案:

答案 0 :(得分:8)

使用HashSet<T>.Contains进行快速O(1)存在检查。要么只使用HashSet,要么同时维护ListHashSet并保持同步。