История:
Я признаю, что не пытался сравнивать это, но мне любопытно...
Каковы характеристики CPU/памяти для Enumerable.ToArray<T>
(и его кузена Enumerable.ToList<T>
)?
Так как IEnumerable
не рекламирует заранее, сколько элементов он имеет, я (возможно наивно) предположим, что ToArray
должен "угадать" начальный размер массива, а затем изменить размер/перераспределить массив, если первое предположение кажется слишком маленьким, а затем для его изменения еще раз, если второе предположение кажется слишком маленьким и т.д.... Это может привести к ухудшению качества работы.
Я могу представить лучшие подходы, связанные с (гибридными) списками, но для этого все равно потребуется более одного распределения (хотя и не перераспределения) и довольно бит копирования, хотя он может быть линейным, несмотря на накладные расходы.
Вопрос:
Существует ли какая-то "магия" за кулисами, которая позволяет избежать необходимости повторного изменения размера и делает ToArray
линейной по пространству и времени?
В целом, существует ли "официальная" документация по характеристикам производительности BCL?