以前は小さい (より) データのセットを使用していたレガシー アプリがあります。
現在、より大きなデータ セットで実行できるように拡張しています (常にうまく機能します)。
これで、このコードができました。 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 は非常に遅く、より良い代替手段はありますか?