Список с повторяющимися объектами - Сколько стоит память? - PullRequest
7 голосов
/ 22 января 2012

После создания списка (без учета накладных расходов, связанных с созданием списка), какова стоимость памяти для добавления одного и того же объекта в список снова и снова? Я считаю, что следующее просто добавляет один и тот же указатель на память в список снова и снова, и, следовательно, этот список на самом деле совсем не занимает много памяти. Кто-нибудь может подтвердить, что это так?

List<newType> list = new List<newType>();

newType example = new newType();

for (int i = 0; i < 10000; i++)
{
   list.Add(example);
}

(Предположим, что новый newType занимает значительно больше памяти, чем указатель)

EDIT

newType - это класс. Извините, что не разъяснил это.

Ответы [ 2 ]

5 голосов
/ 22 января 2012

Это зависит от того, является ли newType class (тип ссылки) или struct (тип значения).Ваше объяснение верно для ссылочных типов, но типы значений копируются полностью, поэтому список будет увеличиваться на размер вашего типа значения по мере добавления элементов в список.Также обратите внимание, что увеличение списка не будет равномерным с добавлением элементов, потому что внутренне List выделяет память порциями, ожидая размещения большего количества элементов.

2 голосов
/ 22 января 2012

Там будет мало накладных расходов, так как вы будете хранить несколько ссылок на один и тот же объект.В списке хранятся только ссылки на объекты, которые вы добавляете, сами объекты размещаются в другом месте.Поскольку вы добавляете один и тот же объект несколько раз, все они будут указывать на один и тот же объект в куче, и единственными издержками будут сами ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...