当把一个对象引用分配给一个变量时,该变量就包含对对象的一个强引用(strong reference)。垃圾收集器不会收回强引用仍在使用的对象。只要当变量离开作用域,或者显示地给变量分配null时,强引用才被删除。
弱引用(weak
reference)可以保持对对象的引用,同时允许垃圾收集器在它认为适当的垃圾收集时间释放对象,回收内存。假设有一个对象创建相对便宜,但需耗费大量的内存,如果希望保持这个对象,在应用程序需要使用它,但也希望能够告诉垃圾收集器,在必要时把内存收回。
那么.NET为什么要提供弱引用这个功能,这既增加了对象状态的复杂性,也加大了我们学习的难度,好象很不合算吗?其实弱引用还是很有用的,一般认为当满足下列条件时,我们就应该考虑使用弱引用:
对象稍后可能被使用,但不是很确定。(如果确定要使用,就应该用强引用)
如果需要,对象可以重新被构造出来(比如数据库构造)。
对象占相对比较大的内存(一般大于几KB以上)
好象上面所列的条件很理论很晦涩啊!其实在日常实践中,可以用一句话来概括:弱引用一般用来完成对象的缓存,以提高应用程序的性能。