我读了雨痕“弱引用 WeakReference”一文。可是在一处“使用弱引用后,不应该再使用强引用,有关细节可以参考SDK帮助文档。”查了MSDN也没有找到为什么,请高人,说说或给出相关"SDK帮助文档"文章的地址。在线。好了立即给分。
解决方案 »
- C#一个方法里代码同时运行(不用线程)
- .net项目中position: relative属性 阴影效果+鼠标放上去显示大图
- 2009年! 散分 大家许下自己的愿望吧!(一年内能实现的噢!)
- keyPress事件使用中文输入法会触发两遍?
- dataTable.Compute的小问题??我的信誉分怎么变成96了。版主为什么呀。进来说明一下。
- 上传图片预览的问题.
- 急。。短信 接口的问题!!
- C#怎么对并口进行操作(rroo(天之痕)) 兄及各位达仁请进
- 问一个简单问题:如何统计一个程序中正在使用的所有对象总数
- 怎么才能让MDI里面父窗口的按钮可以改变全部或者某个指定的子窗口控件的属性呢?
- 如何实现单击按钮打开新的窗口.
- 网上找的html文件建立搜索源代码、文档说明,调试出错,那位大侠帮看看
[ 2005-07-27 23:38:14 | 作者: yuhen ]
字号: 大 | 中 | 小
在程序设计中我们经常会进行一些全局缓存设计,诸如使用静态或者全局根字段来引用某个对象,以便一次创建多次使用。如:
class BigData
{
} class Program
{
static BigData cache; public static BigData DataCache
{
get
{
if (cache== null) cache= new BigData();
return cache;
}
}
}但是这样做在某些时候会存在一些弊端,如:
1. 当dataCache并没有被频繁使用,甚至因为某些原因仅仅被使用了一次时会造成内存资源的浪费。
2. 由于GC只能回收不可达对象,因此即便内存不足,GC也无法回收这些闲置资源。这时建议你使用 WeakReference 来重构你的程序,以便获得更好的系统性能。
WeakReference :“弱引用”,即在引用对象的同时仍然允许对该对象进行垃圾回收。
使用弱引用后,不应该再使用强引用,有关细节可以参考SDK帮助文档。*****这就是我说的地方 class BigData
{
~BigData()
{
Console.WriteLine("Destory...");
} public void Test()
{
Console.WriteLine("Test");
}
} class Program
{
static WeakReference cache = new WeakReference(null); public static BigData DataCache
{
get
{
BigData data = cache.Target as BigData;
if (data == null)
{
data = new BigData();
cache.Target = data;
} return data;
}
} static void Main(string[] args)
{
DataCache.Test();
DataCache.Test(); GC.Collect();
DataCache.Test();
}
}改进后的程序,我们依旧可以实现我们缓存的目的,而GC也可以在合时的时候释放cache占用的内存。
.NET中的缓存功能多采用了类似的设计。
当然并非要求所有的场合都适合使用弱引用。补充:弱引用分为"短弱引用(Short Week Reference)"和"长弱引用(Long Week Reference)",其区别是长弱引用在对象的Finalize方法被GC调用后依然追踪对象。基于安全考虑,不推荐使用长弱引用。因此建议使用
WeakReference wr = new WeakReference(object);
或
WeakReference wr = new WeakReference(object, false);