0

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

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

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

4

1 回答 1

8

用于HashSet<T>.Contains快速 O(1) 存在性检查。要么只使用 aHashSet要么同时保持两者ListHashSet保持它们同步。

于 2012-11-27T19:24:58.617 回答