- - PR -
実行中画面リソースの解放について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-10-08 09:54
お世話になります。
開発環境はVB2005で、以下のソースに対し、質問させていただきます。 'ユーザコントロール Dim obj As New WindowsControlLibrary1.UserControl1 '画面に追加 Me.Controls.Add(obj) '処理 '処理 Me.Controls.Remove(obj) obj.Dispose() obj = Nothing 画面が閉じるまで、objが解放されません。 画面が表示するまま、ユーザコントロールを解放する方法がありませんでしょうか? 以上、よろしくお願いします。 [ メッセージ編集済み 編集者: αβ 編集日時 2008-10-08 11:26 ] |
|
投稿日時: 2008-10-08 13:11
『マネージドメモリ』は、ガベージコレクタが「解放」します。
Disposeでは解放せず、『解放して良いとマークする』しているだけです。 ガベージコレクタを動作させてみるといいかも知れません。 |
|
投稿日時: 2008-10-08 13:55
ご返答ありがとうございます。
解放したいコントロールはフォームに追加したので、 ガベージコレクタを実行しても、 フォームを解放しない限り、コントロールの解放が無理のようですが、 理解が間違いましたら、すみません。 念のため、テストソースを載せます。 Debug.Print("最初は" & GC.GetTotalMemory(False)) For i As Integer = 0 To 10 Dim obj As New WindowsControlLibrary1.UserControl1 Me.Controls.Add(obj) Me.Controls.Remove(obj) obj.Dispose() obj = Nothing Next GC.Collect() Debug.Print("最後は" & GC.GetTotalMemory(False)) |
|
投稿日時: 2008-10-08 16:57
New WindowsControlLibrary1.UserControl1 は、TextBoxに
してみましたが、GetTotalMemory数は減少しましたけど。 念のために、下記3行にしてみるとか GC.Collect() GC.WaitForPendingFinalizers() GC.Collect() Debug.Print("最後は" & GC.GetTotalMemory(False)) |
|
投稿日時: 2008-10-08 18:26
やじゅ様、ご返答ありがとうございました。
GC.WaitForPendingFinalizers() の一行を入れていなかったので、 すぐに減少したことが確認できなくて、失礼いたしました。 おかげさまで、無事に解決できました、ありがとうございました。 |
1