作者cole945 (躂躂..)
看板C_Sharp
标题Re: [问题] 请问C#的delete...
时间Thu Oct 2 00:29:05 2008
我页尾列了4篇文章, 如果想加强观念的话可以参考看看~
第一篇是在讲 Dispose(), 为什麽要Dispose? 为什麽不用 GC?
第二、三篇是在讲 .NET 的 GC 机制的..
最後一篇则是在谈, 如果你的.NET程式记忆体使用度一直增加,
那该怎麽找出问题出在哪..
因为正常人应该不会想没事去嗑4篇原文文件, 而且还是用电脑萤幕看..
所以我就大略讲一下内容 .___./
Dispose()和GC没什麽关, 他不过是一个约定成俗的method,
让使用者想要释放资源时, 只要直接呼叫他就可以了~
(你要的话, 也可以自已设计一个Framework, 但是用另一个名字~)
Dispose()是用来回收 unmanged 的资源的, 例如你开启一个档案,这个
档案并不会因为物件被GC回收就被 close掉, 而要你自已去明确呼叫
close(). 又或者你使用了一些 C/C++写的DLL, GC并不会知道他们所配
置的记忆体, 所以你也要亲自释放掉. Dispose()并不会回收任何managed
的记忆体, 更不会回收object本身..
但是为什麽不用 finalizer 来关闭档案或删除unmaged memroy呢?
因为 finalizer 被呼叫的时间不确定. 最迟可能是在关闭程式时才
被呼叫.. 所以你没办法掌控档案什麽时候被关闭, 若中间程式突然
当掉, 那这个档案就有可能没正确写入..
至於最原原原po的问题, 前面toki也有回答到, 用GC.collect()
但在使用GC.collect()时, 原原原po可能要考量到,
collect() 并不是像 delete 那样, 可以指定你想删除的object,
他会扫瞄整个managed heap检查谁可以被释放, 所以太频繁的呼叫,
可能会让程式的效能降低..
--
Demystifying Dispose
http://blogs.msdn.com/clyon/archive/2004/09/21/232445.aspx
Garbage Collection: Automatic Memory Management
http://msdn.microsoft.com/en-us/magazine/bb985010.aspx
Garbage Collection: Part 2
http://msdn.microsoft.com/en-us/magazine/bb985011.aspx
Identify And Prevent Memory Leaks In Managed Code
http://msdn.microsoft.com/en-us/magazine/cc163491.aspx
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.42.221
1F:推 deuter:再加一个连接, Jeffrey Richter谈 garbage collection 10/02 14:11