目标:获得
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);
第一个更有效,但我怀疑它不仅仅是微优化。如果您遇到性能问题,很可能可以在其他地方找到根本原因。
为什么第一个(一点点)效率更高?因为您仅通过
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();