ple*_*and 3 c# performance search list
我正在使用代码库,其中列表需要经常搜索单个元素.
使用Predicate和Find()比在List上手动执行枚举更快吗?
例如:
string needle = "example";
FooObj result = _list.Find(delegate(FooObj foo) {
return foo.Name == needle;
});
Run Code Online (Sandbox Code Playgroud)
与
string needle = "example";
foreach (FooObj foo in _list)
{
if (foo.Name == needle)
return foo;
}
Run Code Online (Sandbox Code Playgroud)
虽然它们在功能上是等同的,但它们在性能方面是否相同?
它们在性能上并不相同.Find()方法需要为列表中的每个项调用一个方法(在本例中为委托).与内联比较相比,方法调用不是免费的并且相对昂贵.foreach版本不需要为每个对象调用额外的方法.
话虽这么说,在我实际分析我的代码并发现这是一个问题之前,我不会根据性能选择其中一个.我还没有发现这个场景的开销对于我编写的代码来说都是一个"热门路径"问题,而且我在Find和其他类似方法中使用了这个模式.