21 Console.WriteLine("[Error]程序删除文件失败﹕{0}", ex.Message); 22 } 23 } 24}
13.有人举手﹐讲这么多﹐早告诉我调用fs.Close不就得了。 哥们﹐fs.Close()方法是由您写的﹐调不调用﹐手在您身上﹐您不调用的话﹐哪天程序出了问题﹐您有会叫﹕微软真垃圾﹐.net真不稳定﹐还是java好﹐安全﹐可靠... 为防您的国骂﹐MS只好在垃圾收集中加这一款﹐以防不测...
14.Dispose模式 认真查看.net类库中的那些基本类别﹐凡是有Finalize方法的类别﹐基本上都提供了诸如Dispose,Close,Dispose(bool)等方法(FileStream也不例外)
15.其实不管是Dispose,Close,Finalize方法﹐最终应该都是执行相同的代码 区别﹕ Finalize方法﹕只能由微软调用 Dispose和Close方法﹕提供给您调用 因此在您使用完那些类别后﹐那就直接调用Close吧(没有Close﹐再调用Dispose方法)﹐当然万一您忘了﹐也别担心﹐还有垃圾收集器帮您垫后。
七.第二个结论﹕ 1.在您开发一个封装非托管资源(即类中的字段引用到了非托管资源)的类别时﹕ A:强烈建议您提供Finalize方法进行非托管资源的释放﹐.net垃圾收集器不会帮您自动回收那部分资源﹐而是通过调用您的Finalize方法来帮您释放。(这样可以保证﹕在使用您类别的那位程序员忘了手动回收内存时﹐还可通过垃圾收集器来补救)
B.强烈建议您提供一个Close或Dispose方法﹐以便使用您类别的程序员可以手动释放您的类别中的非托管资源。(参见.net框架程序设计 自动内存管理一章实现Dispose模式)
C.如果类别封装了像FileStream这样的对象(即对非托管资源的再次封装)时﹐一般也应该提供一 个Close或Dispose方法﹐除非您的这个成员保证在每次使用后﹐都被正常的关闭﹐即对调用者透明。
2.在您使用一个封装非托管资源的类别时﹕ A:强烈建议您在明确知道这个类别没有用之后﹐调用其提供的Close或Dispose方法手动释放其非托管资源的 内存。有道是﹕有借有还﹐再借不难;借了不还﹐再借休想~~
B:注意在手动释放后﹐不要再调用该对象的相关方法了﹐因为对象已经损毁了
再次BTW:不管是Finalize﹐Close还是Dispose﹐您都无法显式释放托管堆内存﹐它们永远是微软的"私人财产 "﹕) http://www.cnblogs.com/tsoukw/archive/2006/12/08/586525.html 上一页 [1] [2] [3] [4] [5] |