将集合分配给项后将其设置为null.source将清除资源
本文关键字:null source 资源 清除 设置 集合 分配 | 更新日期: 2023-09-27 18:29:07
我在应用程序中进行了一些性能优化,在很多地方我将集合分配给列表框的itemsource属性。当我将集合分配给列表框时,它是从内存中释放的原始集合。如果没有,通过将其设置为null,它会将该集合标记为垃圾收集吗?
例如:
void myWebServiceCompleted(object sender, List<Item> itemList)
{
ItemListBox.ItemsSource = itemList;
//Would setting itemList = null clear up resources?
}
我只是担心,因为这种类型的任务是在应用程序中的多个位置进行的,如果上述情况属实,则意味着内存增加了一倍。
否。
ListBox包含对原始列表的引用,因此它不会被垃圾回收。如果出于任何原因希望收集原始列表,可以手动将ListItems添加到ListBox中。
在这种情况下,只要没有其他引用,就可以收集原始列表。
我想,如果集合中的每个项都是资源密集型的,并且列表框只需要知道几个字段(例如名称和id)
不,不会。itemList是一个引用类型。它并不像你想象的那样重复。相反,你只是有多个引用。这就像在邮件中收到多封地址相同的信件。这并不意味着该地址的房子是重复的,只是有多个地址指的是同一栋房子。
只要一个根对象仍然引用您的集合,垃圾收集器就不会释放它。将itemList设置为null对该集合占用的总空间没有影响。
我只是担心,因为这种类型的任务是在应用程序的多个位置进行的,这意味着内存增加了一倍。
这并不意味着。我强烈鼓励你放弃你正在做的一切,阅读关于引用类型的文章,直到你理解这一点。
我现在明白了为什么Joel Spolsky认为每个程序员都应该学习C.