我有 List 有 150K 个元素。IndexOf() 的平均工作时间比 Contains() 低 4 倍。我尝试使用 int 列表。对于 List of strings IndexOf 来说要快一些。
我发现只有一个主要区别,它是 TargetedPachingOptOut 属性。MSDN 告诉:
指示应用此属性的 .NET Framework 类库方法不太可能受到服务版本的影响,因此有资格跨本机图像生成器 (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() 慢。