我正在尝试掌握 LINQ。最让我烦恼的是,即使我更好地理解语法,我也不想无意中为了表现力而牺牲性能。
它们是“Effective LINQ”的任何好的集中式信息或书籍存储库吗?否则,您个人最喜欢的高性能 LINQ 技术是什么?
我主要关注 LINQ to Objects,但当然也欢迎所有关于 LINQ to SQL 和 LINQ to XML 的建议。谢谢。
最佳答案
简单地了解 LINQ 在内部做什么应该会产生足够的信息来了解您是否正在遭受性能损失。
这是一个简单的示例,其中 LINQ 有助于提高性能。考虑这种典型的老派方法:
List<Foo> foos = GetSomeFoos();
List<Foo> filteredFoos = new List<Foo>();
foreach(Foo foo in foos)
{
if(foo.SomeProperty == "somevalue")
{
filteredFoos.Add(foo);
}
}
myRepeater.DataSource = filteredFoos;
myRepeater.DataBind();
所以上面的代码将迭代两次并分配第二个容器来保存过滤后的值。多么浪费!与之比较:
var foos = GetSomeFoos();
var filteredFoos = foos.Where(foo => foo.SomeProperty == "somevalue");
myRepeater.DataSource = filteredFoos;
myRepeater.DataBind();
这只迭代一次(当转发器被绑定(bind)时);它只使用原始容器;
filteredFoos
只是一个中间枚举器。如果出于某种原因,您决定稍后不绑定(bind)中继器,则不会浪费任何内容。你甚至不迭代或评估一次。当您进行非常复杂的序列操作时,您可能会通过利用 LINQ 固有的链式和惰性求值的使用而获益良多。同样,与任何事情一样,这只是了解它实际在做什么的问题。
关于c# - LINQ 性能常见问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4044400/