gpt4 book ai didi

.net - 为什么 List.IndexOf() 比 List.Contains() 快很多?

转载 作者:行者123 更新时间:2023-12-03 15:02:42 24 4
gpt4 key购买 nike

我有包含 150K 个元素的 List。 IndexOf() 的平均工作时间比 Contains() 低 4 倍。我尝试使用 int 列表。对于字符串列表 IndexOf 快一点。

我只发现了一个主要区别,它是 TargetedPatchingOptOut 属性。 MSDN 说:

Indicates that the .NET Framework class library method to which this attribute is applied is unlikely to be affected by servicing releases, and therefore is eligible to be inlined across Native Image Generator (NGen) images.



这个属性可能是这种行为的原因吗?为什么方法 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() 慢。

最佳答案

根据他们的 MSDN 条目,他们各自得出的确定相等性的方法略有不同。查看以下每个条目的“备注”:
List<T>.IndexOf用途 EqualityComparer<T>.Default http://msdn.microsoft.com/en-us/library/e4w08k17.aspx
List<T>.Contains用途 IEquatable<T>.Equals http://msdn.microsoft.com/en-us/library/bhkz42b3.aspx

即使他们最终调用相同的方法来确定最后的相等性(就像这里的情况一样),他们也会采取不同的路线到达那里,所以这可能会“破坏它”。

鉴于“4 倍差异”似乎并非实际情况,一些副手拳击可能会造成一些差异,特别是对于 150k 大小的数据集

关于.net - 为什么 List<T>.IndexOf() 比 List<T>.Contains() 快很多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4039908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com