我在我的应用程序中进行了一些性能优化,并且我将很多地方分配给列表框的itemssource属性。当我将集合分配到列表框时,是从内存中分配的原始集合。如果没有,通过将其设置为null,它会标记集合以进行垃圾收集吗?
例如:
void myWebServiceCompleted(object sender, List<Item> itemList)
{
ItemListBox.ItemsSource = itemList;
//Would setting itemList = null clear up resources?
}
我只是担心,因为这种类型的分配是在应用程序的多个位置进行的,如果上述情况属实,则意味着内存的两倍。
答案 0 :(得分:1)
只要一个有根对象仍然引用您的集合,它就不会被垃圾收集器释放。将itemList设置为null不会影响此集合占用的总空间。
我只是担心,因为这种类型的分配是在应用程序的多个位置进行的,这意味着内存的两倍。
这并不意味着。我强烈建议你放弃你正在做的一切,阅读有关参考类型的内容,直到你理解了这个非常重要的观点。
我现在明白为什么Joel Spolsky认为每个程序员都应该学习C.
答案 1 :(得分:1)
没有
ListBox包含对原始列表的引用,因此不会对其进行垃圾回收。 如果由于某种原因您希望收集原始列表,您可以手动将ListItem添加到ListBox。
在这种情况下,只要没有其他参考文献,就可以收集原始列表。
我想如果你的集合中的每个项目都是资源丰富的,并且列表框只需要知道几个字段(例如名称和id),这将非常有用