gpt4 book ai didi

c# - Find() 与列表上的枚举

转载 作者:行者123 更新时间:2023-11-30 13:18:41 25 4
gpt4 key购买 nike

我正在使用一个代码库,其中需要经常搜索列表以查找单个元素。

使用 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() 方法需要为列表中的每个项目调用一个方法(在本例中为委托(delegate))。方法调用不是免费的,并且与内联比较相比相对昂贵。 foreach 版本不需要为每个对象调用额外的方法。

也就是说,在我实际分析我的代码并发现这是一个问题之前,我不会根据性能选择一个或另一个。我还没有发现这种情况的开销对于我编写的代码来说都是“热路径”问题,并且我在 Find 和其他类似方法中经常使用这种模式。

关于c# - Find() 与列表上的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/401482/

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