Jon*_*nny 20 .net c# linq performance
好吧,我遇到很多情况,IEnumerable是不够的.但是我不确定上述方法调用的性能.
我真正想问的是:
是ToList/ToArray的性能:
如果我在列表上调用linq扩展方法,如果我调用ToList则它具有O(1)性能,如果调用ToArray则具有O(n)(如果我的原始列表是数组则相反)?
一些魔法发生了,性能是O(1)?
字典可能是O(n),对吧?
Jon*_*eet 47
ToList
/ToArray
O(n)操作的性能是否会复制IEnumerable
到新的数组/列表?
是.ToList
效率稍高,因为它不需要先将内部缓冲区修剪到合适的长度.
如果我在列表上调用linq扩展方法,如果我调用ToList则它具有O(1)性能,如果调用ToArray则具有O(n)(如果我的原始列表是数组则相反)?
不会.对于这两个电话,总会创建一个新的集合; 这是原始集合的浅层副本.调用ToList
或者调用ToArray
任何函数ICollection<T>
比使用一个IEnumerable<T>
没有实现的简单函数更有效ICollection<T>
,因为对于一个集合,已知长度.(这在执行时检测到;您不必担心编译时类型.)
字典可能是O(n),对吧?
假设散列是合理的,那就是O(N),是的.基本上它会以您可能期望的方式创建一个新的字典.
您可能想阅读我的Edulinq博客系列中的相应帖子: