C# Linq ToList/ToArray/ToDictionary性能
我遇到很多情况,仅仅有一个IEnumerable是不够的。但是,我不确定上述方法调用的性能 我真正想问的是: 是ToList/ToArray的性能:C# Linq ToList/ToArray/ToDictionary性能,c#,.net,performance,linq,C#,.net,Performance,Linq,我遇到很多情况,仅仅有一个IEnumerable是不够的。但是,我不确定上述方法调用的性能 我真正想问的是: 是ToList/ToArray的性能: 将IEnumerable复制到新数组/列表的O(n)操作 如果我在一个列表上调用一个linq扩展方法,那么如果我调用ToList,它的性能为O(1),如果调用ToArray,它的性能为O(n)(如果我的原始列表是数组,则性能相反) 一些魔术发生了,表演是O(1) 可能到字典是O(n),对吗 ToList/ToArray的性能是否是将IEnumera
ToList
/ToArray
的性能是否是将IEnumerable
复制到新数组/列表的O(n)操作
对ToList
的效率稍高一些,因为它不需要先将内部缓冲区修剪到合适的长度
如果我在一个列表上调用一个linq扩展方法,那么如果我调用ToList,它的性能为O(1),如果调用ToArray,它的性能为O(n)(如果我的原始列表是数组,则性能相反)
否。对于两个调用,始终会创建一个新集合;那是原始收藏的肤浅复制品。在任何ICollection
上调用ToList
或ToArray
要比在一个简单的IEnumerable
上调用ToList
更有效,因为它没有实现ICollection
,但是对于一个已知长度的集合来说,它的开头就是。(不过,这是在执行时检测到的;您不需要担心编译时类型。)
可能到字典是O(n),对吗
假设散列是合理的,它是O(N),是的。基本上,它创建了一个新的字典,就像你可能期望的那样
您可能想阅读my Edulink博客系列中的相应文章:
jon_skeet
更改为jonskeet
。以下是新链接,以防有人需要它们:,