我有一个包含150K个元素的List。IndexOf()方法的平均工作时间比Contains()方法慢4倍。我尝试使用int类型的List,对于字符串类型的List,IndexOf()方法稍微快一些。
我只发现了一个主要的差异,那就是TargetedPatchingOptOut属性。MSDN解释如下:
表示应用此属性的.NET Framework类库方法不太可能受到维护发布的影响,因此有资格穿过本机图像生成器(NGen)映像进行内联。
这个属性可能是造成这种行为的原因吗?为什么Contains()方法没有这样的属性?
提前感谢您的回答。
编辑:我的代码类似于这样:
我只发现了一个主要的差异,那就是TargetedPatchingOptOut属性。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()运行得更慢。