Re: [問題] 請問C#的delete...
我頁尾列了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
推
10/02 14:11, , 1F
10/02 14:11, 1F
→
10/02 14:12, , 2F
10/02 14:12, 2F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 5 之 6 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章