我想知道LINQ的总体性能.我承认,这很方便,但是LINQ的性能如何?我知道这是一个广泛的问题.所以我想问一个具体的例子:
我有一个匿名类型:
var users = reader.Select(user => new MembershipUser(reader.Name, reader Age));
现在,我想将其转换为MembershipUserCollection.
所以我这样做:
MembershipUserCollection membershipUsers = new MembershipUserCollection();
users.ToList().ForEach(membershipUsers.Add); //what is the complexity of this line?
最后一行的复杂性是什么?是n ^ 2吗?
ToList()方法是否针对用户的每个元素进行迭代并将其添加到列表中?
还是ToList()工作不同?因为如果不是这样,我很难说出使用代码的最后一行而不是简单地使用代码的原因:
foreach (var user in users)
{
membershipUsers.Add(user);
}
解决方法:
它是O(n)-因为.ToList()通过枚举迭代一次,并将元素复制到结果List
我怀疑这仅仅是由于在List< T>上具有.ForEach()方法的方便.尽管如此,仍可以为IEnumerableT编写直接实现的代码,这将节省此多余的复制-或仅编写
foreach (var user in users) membershipUsers.Add(user)
这基本上就是您想要表达的内容;-)