У меня есть в большой степени заполненный arraylist, который я хочу очистить и снова использовать. Если я очищу его, то действительно ли это освободит, который ранее использовал память?
Я должен также упомянуть, что arraylist является частным полем только для чтения класса, который все еще имеет большую активную работу, чтобы сделать после того, как я использую arraylist в первый раз вокруг. Таким образом, я не могу ждать сборки "мусора" после того, как класс выйдет из объема.
Четкий метод достаточно быстро? Или я должен уничтожить и создать новый arraylist?
Обновление вопроса:
Если мне объявили поле как это (благодаря совету Jon)
/// <summary>
/// Collection of tasks.
/// </summary>
private List<Task> tasks = new List<Task>();
затем я заполняю его.... (в большой степени)
Теперь, если вместо того, чтобы очистить его и обрезать, может я просто звонить:
tasks = new List<Task>();
Это было бы рекомендовано?
Делайте то, что лучше выражает ваши намерения. Вы на самом деле хотите новый список? Если да, создайте новый. Если вы концептуально хотите повторно использовать тот же самый список, позвоните Clear
.
В документации к ArrayList
действительно указано, что Clear
сохраняет первоначальную емкость - таким образом, у вас все равно будет большой массив, но он будет заполнен нулями вместо ссылки на предыдущие элементы:
Емкость
остается неизменной. Для сброса емкостьArrayList
, вызовTrimToSize
или установитеЕмкость
. собственность напрямую. Обрезка пустогоМассивный список
устанавливает емкостьМассивный список
по умолчанию.
Кстати, по какой причине вы используете ArrayList
, а не List
?
Если вы хотите, чтобы память фактически была бесплатной, установите его на NULL и вызовут сборщик мусора. Затем создайте новый ArrayList. Если вы устанавливаете его на NULL, а затем создайте новый, он в конечном итоге получает сбор мусора, когда требуется дополнительная память. Кроме того, я второй общие коллекции. С тех пор я был долгое время, так как я использовал ArrayList.