У меня есть List, который содержит 150K элементов. Среднее время работы IndexOf () в 4 раза меньше, чем Contains (). Я пробовал использовать List of int. Для списка строк IndexOf работает немного быстрее.
Я обнаружил только одно основное отличие, это атрибут TargetedPatchingOptOut. MSDN сообщает:
Указывает, что метод библиотеки классов .NET Framework, к которому применяется этот атрибут, вряд ли будет затронут обслуживающими выпусками, и, следовательно, может быть встроен в образы Native Image Generator (NGen).
Может этот атрибут может быть причиной такого поведения? И почему у метода Contains () нет такого атрибута?
Заранее спасибо.
EDIT:
У меня есть примерно такой код:
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:
Я написал тот же код, что и в IndexOf () и работает медленнее, чем Contains ().