У меня есть 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;
ИЗМЕНИТЬ 2:
Я написал тот же код, что и в IndexOf(), и работает медленнее, чем Contains().