Re: [問題] 請問C#的delete...

看板C_Sharp (C#)作者 (Tomex Ou)時間17年前 (2008/10/01 22:46), 編輯推噓2(2010)
留言12則, 2人參與, 最新討論串4/6 (看更多)
※ 引述《ilovebbs (!!)》之銘言: : ※ 引述《tomex (Tomex Ou)》之銘言: : : c#不需要刪物件,只要該物件沒被參考到 : : 就會被GC自動回收。 : : Garbage Collector的回收機制 : : http://blog.taiwanpage.com.tw/rssview.cfm?id=34746 : : 但~ 如果你是愛乾淨的人,很難接受這樣 : : 因此你可以呼叫物件的 Dispose()函數來明確回收 : : 另也可以善用 using(object o) {...} : : 它也能自動引發Dispose()函數。 : 我想問一下,呼叫Dispose是馬上會回收嗎? : 我發現好像不是馬上回收的樣子,有方法可以讓它馬上回收掉嗎? Dispose()使用是我們用來釋放掉一個物件最大效能負荷的記憶體使用 如關檔或其他耗資源的記憶體陣列等等 其實這樣就夠了,其餘的就讓gc來自動搜集就好了 有程式潔癖的人可能仍然覺得不夠,但留一條生路走 其實可以增加很多效能,例如Weak Reference觀念: http://wiki.dabutek.com/WeakReference.ashx 當然,你也可以再強制呼叫Finialize()或GC.Collect()等清除動作 但我試過好像也不會立即生效,畢竟.NET有自己GC收集演算法 很多書會跟你說,太過人工干預回收時機,整體效能並不好。 我其實也是有程式潔癖的人,但後來抑制住自己的控制慾, 就像機車類型,你騎速克達享受便利,卻要求它起步像排檔車迅速 又圖方便,又要切檔省油,豈不是太挑剔了?? 有時候我們還是選擇相信設計者的巧思吧!! 畢竟人家在設計自動記憶體管理時, 一定都考慮到比我們更不知深幾層的地方 選擇相信他們吧... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.114.125 ※ 編輯: tomex 來自: 118.166.114.125 (10/01 22:49)

10/01 22:53, , 1F
如果還要堅持,那就用unsafe{自己去delete}方式!!
10/01 22:53, 1F

10/01 22:54, , 2F
如果處理影像或需要很即時清除的話,我會用unsafe c++方式清
10/01 22:54, 2F

10/01 23:35, , 3F
Dispose()是在收unmanaged的資源,但GC是收managed資源..
10/01 23:35, 3F

10/01 23:37, , 4F
跟耗不耗大不大沒什麼關係@.@"
10/01 23:37, 4F

10/02 00:20, , 5F
IDispose中就看你怎麼回收,其實也可以不用分那麼清楚...
10/02 00:20, 5F

10/02 00:21, , 6F
WinForm的實作IDispose因為有分unmanged/managed回收故要分
10/02 00:21, 6F

10/02 00:23, , 7F
但若自己的函式實際上就看怎麼清資源,不需細分而作繭自x
10/02 00:23, 7F

10/02 00:35, , 8F
我的意思是,你有沒有呼叫Dispose(),其實不影響物件什麼時
10/02 00:35, 8F

10/02 00:36, , 9F
後被回收.__."
10/02 00:36, 9F

10/02 00:37, , 10F
ex: Lala l1 = new Lala(); Lala l2 = l1; l1.dispose();
10/02 00:37, 10F

10/02 00:37, , 11F
因為l2和l1都仍指著那個"new Lala()" 所以GC不會去回收它
10/02 00:37, 11F

10/06 14:30, , 12F
是的,Strong Reference存在時,都不會被GC mark的
10/06 14:30, 12F
文章代碼(AID): #18uuqobO (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #18uuqobO (C_Sharp)