.Net中如何释放内存?

 .Net于内存的放,一般通.Net自有的自垃圾回收机制来完成。但是,在实际项目中,仅仅的垃圾回收机制,不能达到期的效果。总结了一下,主要使用了三方式:Dispose,GC.Collect以及Marshal.ReleaseComObject。

  

Dispose

于一般的Object象,可以Dispose放。或者在象的候,不使用New,而是使用Using这样在引用束的候,会自动销毁

 

GC.Collect

GC.Collect的功能是,所有行垃圾回收。

代?代是指托管内存中不同的区域,象越老位于的代越靠后,比如:第一次垃圾回收后某个象未被回收,它可能就会从0代移1代,以此推。

垃圾?垃圾就是只没有任何象再和他有引用系,专业就是从始找其引用,一直找,如果找到它正在引用一个,那么这个就是不是垃圾,如果找不到根则这象就是垃圾。

根?根就是指一个存位置,包含指向某个引用型的指。比如静态变量,全局量就是根,当前寄存器里面的象就是根,有当前上的参数,局部量都是根。 

另外,垃圾回收始的候当前所有线程都将被挂起,始收集托管堆上的垃圾,收集完了压缩内存,然后等待垃圾回收束以后再恢复这线程,从个角度来是少用垃圾回收,但是不是不能,要情况而定。

我用到的机是,于一个大数据量的DataTable,以及PopupForm销毁用了GC.Collect。然而用之后,不会立即放,需要等待5~10s

 

Marshal.ReleaseComObject

当使用了非托管的com象的候,一般需要使用Marshal.ReleaseComObject 

com使用引用数来确定象的生存期,com户每次引用象的候,就IUnKnown->AddRef(),而象的候,就IUnKnown->Release(),一旦引用数达到零,就象。

.net中允程序员显式地自己comRelease方法,方法经过.net的包装,叫做System.Runtime.InteropServices.Marshal.ReleaseComObject

Excel用到的Excel.Application,流媒体用到的IGraphBuilderCom对象,均可以通过Marshal.ReleaseComObjec把引用数减一,直至引用数就成了零。垃圾回收com象就可以底的放了。 

 

另外,在大数据量的侯,于引用型的参数,合理的使用 ref out 也可以减小内存的消耗。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值