Предопределение емкости списка - PullRequest
3 голосов
/ 26 сентября 2011

Чтобы предотвратить много перераспределений, в моем коде есть что-то вроде этого:

List<T> result = new List<T>(100);

Нужно ли мне звонить TrimExcess, прежде чем я верну новый список или нет?

result.TrimExcess();
return result;

Цель состоит в том, чтобы ускорить распределение, например, первых 100 предметов. Это правильный способ сделать это или мне нужно делать что-то еще?

Ответы [ 5 ]

2 голосов
/ 26 сентября 2011

Вам не нужно обрезать. Список отслеживает, сколько элементов фактически было добавлено, что отличается от начальной емкости, которая является просто предварительным распределением.

1 голос
/ 26 сентября 2011

Определив емкость initail, вы провели необходимую оптимизацию. Если вы вызываете метод TrimExcess(), вы можете вызвать больше работы по выделению, чем вы действительно хотите.

Документация MSDN для TrimExcess() гласит:

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

Что я понимаю по этому поводу, так это то, что вы, возможно, даже не измените ничего в своем списке с этим вызовом. Мне кажется, что вы на самом деле мало что получаете от этого.

1 голос
/ 26 сентября 2011

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

1 голос
/ 26 сентября 2011

все нормально ..

если вы не собираетесь добавлять больше предметов, вы можете оставить все как написано.

0 голосов
/ 26 сентября 2011

Давайте поясним, что при этом не будет зарезервирована память для выделения 100 T, а только для 100 «указателя» на T. Так что это нормально, но, вероятно, не очень помогает.

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