Ich habe eine Liste mit 150K Elementen. Durchschnittliche Zeit der Arbeit IndexOf() ist 4 mal niedriger als Contains(). Ich habe versucht, List of int zu verwenden. Für List of strings IndexOf ist ein bisschen schneller.
Ich habe nur einen wesentlichen Unterschied gefunden, nämlich das Attribut TargetedPatchingOptOut. MSDN erzählt:
Zeigt an, dass die Methode der .NET Framework-Klassenbibliothek, auf die dieses Attribut angewendet wird, wahrscheinlich nicht von Wartungsversionen betroffen ist und daher in Native Image Generator (NGen)-Bildern eingefügt werden kann.
Könnte dieses Attribut ein Grund für ein solches Verhalten sein? Und warum hat die Methode Contains() kein solches Attribut?
Vielen Dank im Voraus.
EDITです:
Ich habe einen Code wie diesen:
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;
EDIT 2:
Ich habe den gleichen Code wie in IndexOf() geschrieben und es funktioniert langsamer als Contains().