use*_*181 10 c# performance list
其中一种方法
List<T>.IndexOf() 和List<T>.FindIndex()在处理时间方面更有效?
T在这种情况下的类型是String.
Cᴏʀ*_*ᴏʀʏ 16
IndexOf执行for循环,使用Equals被搜索对象的实现来查找匹配项.FindIndex也会执行for循环,但会评估a Predicate来检查匹配.
他们每个都归结为一个for循环.性能差异(如果有的话)可以忽略不计.以下是一些MSDN摘录:
该方法执行线性搜索; 因此,该方法是O(n)运算,其中n是
Count.
List<T>.FindIndex Method (Predicate<T>):
该方法执行线性搜索; 因此,该方法是O(n)运算,其中n是
Count.
也就是说,这两个功能的用法完全不同.前者假设您有一个列表中的对象,您只需知道列表中存在的索引(如果有).
后者假设您了解某个对象的某些条件,并且您希望找到列表中的对象与该条件匹配的第一个索引.可能有多个匹配项,但该方法返回第一个匹配项.
C???建议性能差异可以忽略不计,如果有的话。因为我的直觉是使用委托总是会变慢,所以我决定对其进行测试。
使用 DotNetBenchMark 和以下代码进行测试:
[MemoryDiagnoser]
public class Bench
{
byte[] buffer;
public Bench()
{
buffer = new byte[1024];
}
[Benchmark]
public void FindIndex()
{
int index = Array.FindIndex(buffer, x => x == byte.MaxValue);
}
[Benchmark]
public void IndexOf()
{
int index = Array.IndexOf(buffer, byte.MaxValue);
}
}
Run Code Online (Sandbox Code Playgroud)
性能差异似乎不可忽略,因为它慢了 10 倍以上。
即使在数组的第 16 个元素匹配的情况下,IndexOf 仍然是 FindIndex 的两倍多