- PR -

実行中画面リソースの解放について

1
投稿者投稿内容
αβ
会議室デビュー日: 2008/10/08
投稿数: 3
投稿日時: 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/07/15
投稿数: 28
お住まい・勤務地: 静岡市
投稿日時: 2008-10-08 13:11
『マネージドメモリ』は、ガベージコレクタが「解放」します。
Disposeでは解放せず、『解放して良いとマークする』しているだけです。

ガベージコレクタを動作させてみるといいかも知れません。
αβ
会議室デビュー日: 2008/10/08
投稿数: 3
投稿日時: 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/07/15
投稿数: 28
お住まい・勤務地: 静岡市
投稿日時: 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
投稿数: 3
投稿日時: 2008-10-08 18:26
やじゅ様、ご返答ありがとうございました。

GC.WaitForPendingFinalizers()
の一行を入れていなかったので、
すぐに減少したことが確認できなくて、失礼いたしました。

おかげさまで、無事に解決できました、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)