问个.NET里面资源释放的问题 比如FileStream这样的类问题1:如果不调用它的Dispose方法,他所占用的非托管资源最后会被释放吗?问题2:是不是.NET里面所有的类,对非托管资源都实现了Dispose问题3:什么时候需要自己写Dispose方法, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1, 简单的说,不调用程序关闭才释放2, .net 自带的都有这些保障3, 如果类里使用了非托管资源就应该指定 dispose finalize dispose是Component才有的,如果你自己定义的组件help:每次释放对 Component 的最后一个引用前,均应调用 Dispose。否则,在垃圾回收器调用 Component 对象的 Finalize 方法之前,正在使用的资源不会被释放。 FileStream 打开了会获取文件的句柄,根据参数不同还可能独占阻止别的进程访问,如果不在 Dispose 或 Finalize 里指定,只有等到程序结束才会释放了,这样轻则占用个句柄,重则影响别的程序。当你的类里创建全局性的非托管资源,例如封装窗口、文件和网络连接、数据库连接,或者其他 API 要求调用函数释来放的东西,这样就应该继承 IDispose 接口,在 Dispose 里加上释放的代码,最好还应该加上 Finalize 函数。 看msdn或帮助,查 "实现 Dispose 方法" 对于所有Stream的派生类(FileStream也是),请不要直接调用Dispose,使用Close方法关闭流,关闭的同时它会自动释放资源,这也是为了流的写入缓存能够在刷新后再释放。“dispose是Component才有的,如果你自己定义的组件”不对,dispose是任何类都可以有的,任何情况下都可以实现IDispose接口,而不局限于非托管资源的释放,比如我想在这个类被丢弃不用的时候,将状态存入文件,就可以继承IDispose接口,实现Dispose操作来处理状态写入文件的操作,Dispose不单单用来释放内存,它是对象被释放时调用的一个函数,只要类继承IDispose接口,在其释放的时候必定执行Dispose方法,那么我们就可以利用这点处理自己想处理的一些代码了。 详细点 看MSDN 最直白 求一时间计算函数 VS2005和Dreamweaver的使用 急求解决方法 问下在静态页中的动态留言怎么处理的? 用的VS2003一用RICHTEXTBOX就出现异常,如何解决 禁止IE中的弹出广告 做WEB,怎么用内存表,怎么向内存表插入数据。请指点。最好用C# 高分求水晶报表 10 keycode 如何实现类似imagelist、timer这类不直接显示在窗体上的控件 VS.net安装部署问题 远程服务器返回错误:(400)错误的请求,微软的翻译接口 tijiao.Click+=new System.EventHandler(btn)单击按钮不响应事件
2, .net 自带的都有这些保障
3, 如果类里使用了非托管资源就应该指定 dispose finalize
当你的类里创建全局性的非托管资源,例如封装窗口、文件和网络连接、数据库连接,或者其他 API 要求调用函数释来放的东西,这样就应该继承 IDispose 接口,在 Dispose 里加上释放的代码,最好还应该加上 Finalize 函数。
不对,dispose是任何类都可以有的,任何情况下都可以实现IDispose接口,而不局限于非托管资源的释放,比如我想在这个类被丢弃不用的时候,将状态存入文件,就可以继承IDispose接口,实现Dispose操作来处理状态写入文件的操作,Dispose不单单用来释放内存,它是对象被释放时调用的一个函数,只要类继承IDispose接口,在其释放的时候必定执行Dispose方法,那么我们就可以利用这点处理自己想处理的一些代码了。
详细点 看MSDN 最直白