Я просто хочу знать, защищает ли разработчик LINQ разработчик от производительности при вызове ToArray() из массива.Верно ли 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
Поскольку хэш-коды все разные, что это значит, что операция копирования произошла все три раза?
No Shortcut. См. Http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,783a052330e7d48d, ссылки – Ralf
Нет, он всегда возвращает новую копию http://stackoverflow.com/questions/2092811/does- array-toarray-return-the-original-array-if-it-the-the-same-type – keyboardP
Вы уже указали в вопросе, что разные массивы возвращены, так почему вы задаете вопрос, вы уже получили ответ? – Servy