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