如何在Dispose方法中释放非托管资源 我在A类中以app声明了非托管的一个对象 然后在dispose中如何释放他 直接app=null? 还是其他的如果未释放会怎么样 关闭程序后仍然在内存中存在吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Finalize的目的是用于释放非托管的资源,而Dispose是用于释放所有资源,包括托管的和非托管的。 非托管对象实现IDisposable接口在Dispose方法中清理,托管对象不需要清理GC.SuppressFinalize 非托管对象需要自己提供释放的API,Close,Dispose之类的方法.如果不释放,可能会有内存泄露(memory leak) 晕 那岂不是很麻烦 我又没学过C++ 怎么提供API之类的啊 对于.Net本身提供的实现System.IDisposable接口的类,用完之后(不在需要时),立即调用它的Dispose方法就行了. 回楼上我说的不是释放.NET的对象 而是非托管的对象请再看下题: 只要不是你自己弄进来的非托管资源,比如.Net自身提供(由设计.Net的人弄进来的)的,除了NotifyIcon必须显式释放外,别的几乎都会在程序退出时自动释放.有些对象,需要在使用过程中根据需要释放,比如FileStream,互斥器,各种Pen,Font等. 就是我自己引进的非托管资源这么说吧 我引用了一个COM组件 叫Excel Object Lib 里面有一个Application类 我在托管代码中实例化了它 在程序结束前把他的引用设为了NULL 就是一楼所说的app=null 在程序结束后这个对象还在内存中存在吗? 我这个程序每天要运行多次 如果不释放内存 对系统损失太大 COM组件有它自己的释放方法,比如Excel.Application类的Quit方法.这些需要编写代码释放,如果不释放的话,程序结束后,还在内存中(而且是个进程) public void Dispose() { this.Dispose(true); } ~ExamQuestion() { this.Dispose(false); } protected virtual void Dispose(bool disposing) { if (disposing) { //释放托管资源 } //释放非托管资源 //这不是典型的清理模式吗? 关键是这里的代码写什么? } 哦 那我就明白了 就是不同的COM组件都有不同的清理函数是吧 谢谢你了 NavBarControl如何显示三级菜单? 转换类型 请问如何导出Excel指定行列 到dataset里?? 100分求 如何用C#.NET来做一个远程监控软件? C# 简单的连接数据库 要写一个Pos打印,请大家给个思路。 c# 在wince的智能设备 开发的图片浏览器 有哪些.net的好的框架呀 你机上的QQ已经达到个数限制,不能再启动新的QQ!急 ~!解决在+100分 向导模式的窗口程序怎么编 Treeview的After_Select事件,初始选择问题 根据字段 显示文字同时加上样式 如何写?
非托管对象实现IDisposable接口在Dispose方法中清理,托管对象不需要清理
GC.SuppressFinalize
如果不释放,可能会有内存泄露(memory leak)
晕 那岂不是很麻烦 我又没学过C++ 怎么提供API之类的啊
我说的不是释放.NET的对象 而是非托管的对象请再看下题:
这么说吧 我引用了一个COM组件 叫Excel Object Lib
里面有一个Application类 我在托管代码中实例化了它 在程序结束前把他的引用设为了NULL 就是一楼所说的app=null
在程序结束后这个对象还在内存中存在吗? 我这个程序每天要运行多次 如果不释放内存 对系统损失太大
{
this.Dispose(true);
} ~ExamQuestion()
{
this.Dispose(false);
} protected virtual void Dispose(bool disposing)
{
if (disposing)
{
//释放托管资源
}
//释放非托管资源
//这不是典型的清理模式吗? 关键是这里的代码写什么?
}
哦 那我就明白了 就是不同的COM组件都有不同的清理函数是吧
谢谢你了