150K の要素を持つ List があります。平均作業時間 IndexOf() は、Contains() の 4 分の 1 です。intのListを使ってみました。文字列のリストの場合、IndexOf の方が少し高速です。
主な違いは 1 つだけ見つかりました。それは属性 TargetedPatchingOptOut です。MSDN は次のように述べています。
この属性が適用される .NET Framework クラス ライブラリ メソッドがサービス リリースの影響を受ける可能性は低いため、Native Image Generator (NGen) イメージ間でインライン化する資格があることを示します。
この属性がそのような動作の理由になる可能性はありますか? そして、Contains() メソッドにそのような属性がないのはなぜですか?
前もって感謝します。
編集:
次のようなコードがあります。
List<int> list = CommonHelper.GetRandomList(size);
long min = long.MaxValue;
long max = 0;
long sum = 0;
foreach (var i in list)
{
m_stopwatch.Reset();
m_stopwatch.Start();
list.Contains(i); // list.IndexOf(i);
m_stopwatch.Stop();
long ticks = m_stopwatch.ElapsedTicks;
if (ticks < min)
min = ticks;
if (ticks > max)
max = ticks;
sum += ticks;
}
long averageSum = sum / size;
編集2:
IndexOf() と同じコードを書きましたが、Contains() よりも遅く動作します。