【发布时间】:2015-07-02 16:33:02
【问题描述】:
我只想知道 LINQ 的实现是否可以保护开发人员在从 Array 调用 ToArray() 时免受性能影响。
例如,
var array1 = Enumerable.Range(0,short.MaxValue).ToArray(); //does the actual copy
var array2 = array1.ToArray() //is this the same object as array1?
var array3 = ((IEnumerable<int>)array2).ToArray() //what about this?
这三个 ToArray() 调用是否具有相同的性能影响?
类似的其他问题已经解决了 ToArray() 的一般性能影响,
Is it better to call ToList() or ToArray() in LINQ queries?
Linq ToList/ToArray/ToDictionary performance
但我很好奇实现是否“足够智能”以避免在源是数组的情况下将元素复制到另一个数组。
我打印了数组 1、2 和 3 中的所有哈希码。
Console.WriteLine(array1.GetHashCode());
Console.WriteLine(array2.GetHashCode());
Console.WriteLine(array3.GetHashCode());
得到了
62476613
11404313
64923656
既然哈希码都不同,这是否意味着复制操作发生了三次?
【问题讨论】:
-
不,它总是返回一个新副本stackoverflow.com/questions/2092811/…
-
你已经在问题中展示了返回不同的数组,那么为什么在你已经得到答案的时候还要问这个问题呢?
-
呸...我没有看到那个答案。然后我重复了这个问题..
-
@AlexeiLevenkov - 谢谢,这是有道理的。我编辑了这个问题。
标签: c# performance linq