Linq,什么更快?第一个带有所有参数的方法或Where方法,然后第一个带有其余参数[关闭]

问题描述 投票:0回答:1

目标:获得

relazed
netural

propertyInfos
数量>500

specialProps
数量为2个。

哪种方式更快:

1.

var specialProps = propertyInfos
            .Where(v => v.TestName == specialTestName && v.Name == propertyName)
            .ToArray();

var relaxed = specialProps.FirstOrDefault(v => v.GroupName == "Relaxed");
var neutral= specialProps.FirstOrDefault(v => v.GroupName == "Neutral");
var relaxed = propertyInfos.FirstOrDefault(v =>
            v.GroupName == "Relaxed" && v.TestName == specialTestName && v.Name == propertyName);

var neutral= propertyInfos.FirstOrDefault(v =>
            v.GroupName == "Neutral" && v.TestName == specialTestName && v.Name == propertyName);
c# performance linq enumerable
1个回答
1
投票

第一个更有效,但我怀疑它不仅仅是微优化。如果您遇到性能问题,很可能可以在其他地方找到根本原因。

为什么第一个(一点点)效率更高?因为您仅通过

TestName
Name
属性过滤一次,所以在第二种方法中您可以过滤整个
propertyInfos
集合。

您也可以使用这种方法:

var groupLookup = propertyInfos
        .Where(v => v.TestName == specialTestName && v.Name == propertyName)
        .ToLookup(x => x.GroupName);
var relaxed = groupLookup["Relaxed"].FirstOrDefault();
var neutral = groupLookup["Neutral"].FirstOrDefault();
© www.soinside.com 2019 - 2024. All rights reserved.