Список по-прежнему пуст, в нем нет элементов, но внутри зарезервирована память на 50 элементов. Это оптимизация, потому что когда вы добавляете элементы в список, он должен выделять новый массив вдвое большего размера, а затем копировать элементы из старого массива в новый.
Обратите внимание, что во время этого перехода, например, при переходе от 256 элементов и добавлении еще одного, он имеет в общей сложности (256 + 512) 768 элементов памяти, выделенных на тот момент, когда он копируется в новый массив. По сути, утроить предыдущую емкость. В зависимости от размера массива это может привести к исключению нехватки памяти. Поэтому, если вы знали заранее, что добавите в список только 257 элементов, вы можете заранее использовать емкость 257. Это позволит избежать тройного использования памяти, поскольку размер массива не должен увеличиваться, поскольку он уже достаточно велик. Обратите внимание, что вероятность возникновения исключений нехватки памяти увеличивается из-за того, что очень большие массивы размещаются в куче, которая не уплотняется, и, таким образом, фрагментация может привести к ситуациям, когда трудно найти непрерывный блок памяти для всего массива. . Поэтому иногда эта проблема приводит к возникновению исключений из-за нехватки памяти, когда кажется, что у вас много свободной памяти. Конечно, вы, вероятно, захотите избежать таких больших списков, если сможете.
Таким образом, используйте емкость в любое время, когда вы заранее знаете, сколько элементов вы будете добавлять, или можете оценить (возможно, немного больше).
person
AaronLS
schedule
21.08.2014
List<T>.Capacity
. - person Habib   schedule 21.08.2014output
? Вы определилиmyList
размером 50. - person John Koerner   schedule 21.08.2014