我正在努力和林克打交道.最让我困扰的是,即使我更好地理解了语法,我也不想在无意中为了表现力而牺牲性能.
他们是否有"高效LINQ"的信息或书籍的良好集中存储库?如果不行,你个人最喜欢的高性能LINQ技术是什么?
我主要关心LINQ到对象,但当然也欢迎所有关于LINQ到SQL和LINQ到XML的建议.谢谢
我正在努力和林克打交道.最让我困扰的是,即使我更好地理解了语法,我也不想在无意中为了表现力而牺牲性能.
他们是否有"高效LINQ"的信息或书籍的良好集中存储库?如果不行,你个人最喜欢的高性能LINQ技术是什么?
我主要关心LINQ到对象,但当然也欢迎所有关于LINQ到SQL和LINQ到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();
这只会迭代一次(当中继器被绑定时);它只使用原始容器;filteredFoos
只是一个中间枚举数.如果出于某种原因,您决定以后不绑定中继器,那么就不会浪费任何东西.你甚至不需要迭代或计算一次.
当你进行非常复杂的序列操作时,你可以通过利用LINQ固有的链式和惰性判断来获得很多好处.同样,和其他事情一样,这只是理解它实际上在做什么的问题.