我如何优化这个linq查询
本文关键字:linq 查询 优化 何优化 | 更新日期: 2023-09-27 18:11:12
是否有办法优化这个查询?
_alternatives.Cast<AlternativePartName>()
.Where(alt => original.ToLower() == alt.CompName)
.Select(alt => alt.AltCompName).ToList();
我正在分析我的应用程序,这段代码是瓶颈之一,196毫秒,但它执行了很多次。
与其对每个条目调用ToLower
,不如只调用一次:
var lower = original.ToLower();
_alternatives.Cast<AlternativePartName>()
.Where(alt => lower == alt.CompName)
.Select(alt => alt.AltCompName).ToList();
您应该尝试在.AsParallel()
中使用更多的内核-这可能是对具有长字符串的大列表的改进
string lower = original.ToLower();
_alternatives.Cast<AlternativePartName>()
.AsParallel()
.Where(alt => lower == alt.CompName)
.Select(alt => alt.AltCompName)
我假设"original"answers"CompName"是字符串。如果是,那么您应该执行以下操作:
_alternatives.Cast<AlternativePartName>()
.Where(alt => String.Equals(original, alt.CompName, StringComparison.OrdinalIgnoreCase))
.Select(alt => alt.AltCompName).ToList();
使用正确的数据结构是提高性能的最佳方法。在您的情况下,如果您使用以CompName
为键并以AltCompNames
为项的列表的字典会更好。查找会非常快,因为不需要迭代,只需要一次查找。保持这种简单的结构与时俱进,添加和删除项目应该不是一个大问题。
只调用一次orignal.ToLower()
不会改变任何实际的性能。
尝试使用例如Parallel LINQ来获得更快的结果,如果你有足够的cpu功率。
我不太懂点语法,但是这个
.Select(alt => alt.AltCompName)
与
结合_alternatives.Cast<AlternativePartName>()
可以通过选择直接生成AlternativPartName
来实现select new AlternativePartName(){...}