C中考虑为大对象使用弱引用.docx

C中考虑为大对象使用弱引用.docx

ID:59256019

大小:11.46 KB

页数:2页

时间:2020-09-08

C中考虑为大对象使用弱引用.docx_第1页
C中考虑为大对象使用弱引用.docx_第2页
资源描述:

《C中考虑为大对象使用弱引用.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.无论怎样尽力,我们总是会使用到某些需要大量内存的数据,而这些内存并不需要经常访问。或许你需要从一个大文件中查找某个特定的值,或者算法需要一个较大的查询表。这时,你也许会采用2中不太好做法:第一种是创建一个本地变量,然后在每次执行该算法时都生成一大块垃圾;第二种则是创建一个成员变量,在很长一段时间内都占用着这一大块内存。很多时候这两种做法都不是非常好。2.有没有一种好的选择来处这个问题呢?答案是创建弱引用,弱引用的对象和垃圾对象差不多,程序会告诉垃圾收集器该对象可以被回收,不过在回收之前你仍旧有一个引用,可以用来在需要的时候访问到该对象。若能合理使用该策略,弱引用将和垃圾收

2、集器协同工作,从而优化内存使用。如下代码说明:///

///大对象类型///publicclassMyLargeClass{privateint[,]matrix;privateushortmatrixXDimension;privateushortmatrixYDimension;publicstringreallyLongMessage;privatestaticWeakReference_weakObj;publicstaticobjectWeakObj{get{return_weakObj?.Target;//“?.”语法为C#6.

3、0的新特性,对应.NetFramework4.6。表示若为空则返回空,若不为空则获取其相应的属性值}set{_weakObj=newWeakReference(value);//弱引用的创建}}publicMyLargeClass(ushortmatrixXDimension,ushortmatrixYDimension){this.matrixXDimension=matrixXDimension;this.matrixYDimension=matrixYDimension;matrix=newint[matrixXDimension,matrixYDimension];}

4、privatevoidInitialize(){//TODO做更多的数据初始化//对matrix二维数组的数据加载}publiclongCalculate(){//TODO处理对matrix对象计算结果returnmatrixXDimension*matrixYDimension*1000;}publicstaticvoidExecute(){//从弱引用中获得大对象,若没有弱引用或弱引用已被回收,此时就需要重新创建对象。MyLargeClassmyLargeObject=WeakObjasMyLargeClass;//myLargeObject可为本地变量,也可为成员变量i

5、f(myLargeObject==null){myLargeObject=newMyLargeClass(1000,1000);}//TODO对myLargeObject对象中的数据进行处理//处理完成后,把大对象归到弱引用,然后把myLargeObject设置为null,表明大对象无引用。此时,系统会认为myLargeObject所指向的对象可以被垃圾收集。若垃圾收集器在此时运行,那么将会回收该对象。不过若是在回收之前,你再次需要该对象,只需如上面的4行代码处理即可。WeakObj=myLargeObject;myLargeObject=null;}}3.从上面的Execu

6、te()方法的2处代码中,可以看出对象的使用与清理交给了运行时处理,这是简单的使用场景,不过很多时候现实并不是那么简单,很少有对象会完全与外界隔离。任何一个大对象都包含了对其他对象的引用。若一个大对象被标记为弱引用,则其内部引用对象也将被标记为弱引用。被标记的弱引用对象就会被回收(不是马上回收)。4.对于实现了IDisposable的对象,则不应该使用弱引用,因为被释放的对象已经不能再弱引用,且在弱引用中你也不能调用Dispose()。所以弱引用应该配合非IDisposable的大对象使用。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。