您使用或使用过的LINQ to Objects优化技术是什么?
在等待“产生foreach”和其他语言/编译器优化到201x中的C#时,我很有意思尽一切可能使LINQ在任何地方使用,而不是性能上的痛苦。
到目前为止,我看到的一种模式是为特定的组合器创建自定义的IEnumerable实现,这样就不会多次重新枚举可枚举。
答案 0 :(得分:10)
我发现了几次 - 不要使用:
if (query.Count() > 0)
...请改用:
if (query.Any())
这样只需要找到第一场比赛。
编辑:您可能还对blog post I recently wrote关于可以在LINQ to Objects中但不是(或不在.NET 3.5中)的优化感兴趣。
此外,如果您要进行大量x.Contains(y)
次操作,x
是现有查询的结果(即它不会是某些优化的集合),您可能应该考虑从HashSet<T>
构建x
,以避免在每次迭代时进行线性扫描(执行查询以生成x
的结果)。