Будет ли установка коллекции в null после назначения ее источника очищать ресурсы? - PullRequest
0 голосов
/ 25 марта 2012

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

Например:

void myWebServiceCompleted(object sender, List<Item> itemList)
{
    ItemListBox.ItemsSource = itemList;
    //Would setting itemList = null clear up resources?
}

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

Ответы [ 2 ]

1 голос
/ 25 марта 2012

номер

ListBox содержит ссылку на ваш исходный список, поэтому он не является сборщиком мусора. Если по какой-либо причине вы хотели, чтобы исходный список был собран, вы можете вручную добавить ListItems в ListBox.

В этом случае исходный список может быть получен, если нет других ссылок.

Полагаю, это было бы полезно, если бы каждый из элементов вашей коллекции был ресурсоемким, а списку нужно было знать только пару полей (например, имя и идентификатор)

1 голос
/ 25 марта 2012

Нет, не будет.itemList является ссылочным типом.Это не дублируется, как вы думаете.Вместо этого у вас есть несколько ссылок на него.Это похоже на получение нескольких писем с одинаковым адресом.Это не означает, что дом с этим адресом дублируется, просто есть несколько адресов, относящихся к одному и тому же дому.

Пока один корневой объект все еще ссылается на вашу коллекцию, он не будет освобожден сборщиком мусора.Установка itemList в значение null не влияет на общее пространство, занимаемое этой коллекцией.

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

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

Теперь я понимаю, почему Джоэл Спольски считает, что каждый программист должен учить C.

...