Trimexcess в списке (Of T) в .net - PullRequest
       25

Trimexcess в списке (Of T) в .net

1 голос
/ 17 сентября 2010

После заполнения списка необходимыми строками, если список больше не будет добавляться, следует ли вызывать trimexcess?

Ответы [ 2 ]

3 голосов
/ 17 сентября 2010

Вызов TrimExcess после загрузки списка, скорее всего, сэкономит вам память. Но помните, что если элементы в вашем списке имеют ссылочный тип (а строки являются ссылочными типами), то все, что вы сохраняете, - это память, необходимая для хранения ссылок.

Так, например, если у вас есть List(of String), который выделен для 2000 элементов, а в нем всего 1000 элементов, вызов TrimExcess сэкономит вам память, занятую 1000 ссылками. Это 4000 байтов в 32-разрядной среде выполнения и 8000 байтов в 64-разрядной среде выполнения.

Как упоминал Эндрю Хейр, вызов TrimExcess после загрузки списка, который некоторое время будет зависать в памяти, вероятно, является хорошей вещью. Вы могли бы также подумать о том, чтобы позвонить TrimExcess, если вы удалите целую кучу вещей из списка, и тогда вы собираетесь сохранить список вокруг. Но повторный вызов TrimExcess для одного и того же списка, если только он действительно не становится большим, просто тратит время.

3 голосов
/ 17 сентября 2010

Вы, конечно, можете, но имейте в виду :

Этот метод может быть использован для минимизации накладные расходы памяти коллекции, если нет новых элементы будут добавлены в коллекция. Стоимость перераспределения и скопировать большой список можно значительный, однако, поэтому Метод TrimExcess ничего не делает, если список составляет более 90 процентов емкость .

Я бы не стал сильно беспокоиться об этом, если бы вы не обнаружили, что большие и редко заполненные списки занимают слишком много памяти.

...