.net освобождает ли ArrayList. Очистить память? - PullRequest
7 голосов
/ 13 января 2010

У меня густонаселенный массив, который я хочу очистить и использовать повторно. Если я уберу это, освободит ли это ранее использованную память?

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

Является ли метод Clear достаточно быстрым? Или я должен уничтожить и создать нового arraylist?

Обновление вопроса:

Если у меня есть поле, объявленное так (благодаря совету Джона)

    /// <summary>
    /// Collection of tasks.
    /// </summary>
    private List<Task> tasks = new List<Task>();

тогда я заполняю это .... (сильно)

Теперь, если вместо очистки и обрезки я могу просто позвонить:

tasks = new List<Task>(); 

Будет ли это рекомендовано?

Ответы [ 2 ]

16 голосов
/ 13 января 2010

Делайте, что выражает ваше намерение лучше. Вы на самом деле хотите новый список? Если так, создайте новый. Если вы концептуально хотите повторно использовать тот же список, позвоните Clear.

В документации для ArrayList указано, что Clear сохраняет исходную емкость - поэтому у вас все равно будет большой массив, но он будет заполнен нулями вместо ссылки на предыдущий элементы:

Capacity остается без изменений. Сбросить емкость ArrayList, звонок TrimToSize или установите Capacity собственность напрямую. Обрезка пустого ArrayList устанавливает емкость ArrayList к емкости по умолчанию.

Кстати, вы используете ArrayList вместо List<T>?

3 голосов
/ 13 января 2010

Если вы хотите, чтобы память фактически была свободной, установите ее в null и вызовите сборщик мусора. Затем создайте новый ArrayList. Если вы установите его в null, а затем создадите новый, он в конечном итоге будет собирать мусор, когда потребуется дополнительная память. Кроме того, я вторые общие коллекции. Прошло много времени с тех пор, как я использовал ArrayList.

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