Re: [.NET] 請問一下如何知道物件已被GC回收?
※ 引述《taroa (未來主義豬)》之銘言:
: 因為在用MDI時,子Frame如果visible從true改成flase
: 有些時候子Frame會被GC回收掉… 0rz
問題癥結在於你的架構設計有點問題, 而不是因為visible被改成flase所致..
會被GC回收, 那是因為該object(也就是你的MDI子Frame)不再被參考到,
你的程式可能是寫成像
Sub CreateFrame()
Dim 子Frame as Frame
子Frame = new Frame
' .....
End Sub
因為 MDI子Frame 只被 "子Frame" 參考到, 而一但離開 CreateFrame,
該MDI子Frame 就無法再用任何方式存取他, 所以才會被 GC 選中回收..
在你的parent form上應該要利用一個像 List 的資料結構來記錄(追蹤)你所建出的
frame, 這樣不只能確保frame不會被gc回收, 更重要的是, 你可以做一些後續的
管理工作 (不然你要怎麼把hiden的frame再show出來?)
(若在 VB2005 還有 Generic Collection 更好用..)
一個簡單的雛型如下
Public Frames As New System.Collections.Generic.List(Of Frame)
Sub CreateFrame()
Dim 子Frame as Frame
子Frame = new Frame
Frames.Add( 子Frame )
'.....
End Sub
: 目前我用的方式是很蠢的,如以下,請問有沒有正確的作法啊 多謝……
: if 子Frame is nothing then
: 子Frame = new frame
: end if
: if 子Frame.created = false then
: 子Frame = new frame
: end if
這個問題有點弔詭..
基本上, 在 .NET程式執行中, 應該是無法判斷本身某個物件是否被回收..
若你還能參考到該物件, 該物件就不該被回收..
子Frame是nothing 也並不代表他已經被回收..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.139.185.247
→
07/14 22:43, , 1F
07/14 22:43, 1F
→
07/14 22:43, , 2F
07/14 22:43, 2F
→
07/14 23:08, , 3F
07/14 23:08, 3F
→
07/15 04:31, , 4F
07/15 04:31, 4F
→
07/15 04:31, , 5F
07/15 04:31, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):