タイトル : Re^4: クラスの破棄について 投稿日 : 2009/05/13(Wed) 10:26 投稿者 : ダンボ
Hongliangさん、YuOさん、どうも有り難うございます。 まとめレスで失礼します。 >http://msdn.microsoft.com/ja-jp/library/fs2xkftw(VS.80).aspx >http://www.atmarkit.co.jp/fdotnet/dotnettips/027dispose/dispose.html >などを見て、ProfileClass.Disposeメソッドを実装し、 「実装」など口はばったいこと書きましたが、実際は理解しないでコピペでした。 コメント部分に適切な処理を入れない限り殆ど意味の無い実装では? 本当にこのDispose()を実行したことが理由で、メモリ消費の右肩上がりが改善 されたのか自信がなくなってきました。(それでもSub Main()抜けた後での Profile.Finalizeでのトレースが出なくなったのはDispose()の所為なんでしょう) ' Field to handle multiple calls to Dispose gracefully. Dim disposed As Boolean = False Public Overloads Sub Dispose() Implements IDisposable.Dispose Dispose(True) GC.SuppressFinalize(Me) End Sub Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean) If disposed = False Then If disposing Then ' Free other state (managed objects). disposed = True End If End If ' Free your own state (unmanaged objects). ' Set large fields to null. End Sub Protected Overrides Sub Finalize() Trace.WriteLine(DefFileFullPath, "PF:Finalize") Dispose(False) End Sub >を実行したところ、メモリ使用量の右肩上がりは止まりSub Main後のFinalizeも >無くなったのでProfileClassの破棄は設計どおりになったと思います。 メモリ消費の一方的な右肩上がりは改善されてノコギリ状に増減するようになったものの、 ・大量の画像処理実行中には、だんだんベースが上がっている。Sub Main後に一気に下がる ・ノコギリ状のメモリ増加量がProfileClassの見積量より大きいような気がする →ProfileClass以外の解放忘れがあるのか? メモリ消費のベース増加量がMB単位(10〜)である 画像Image以外にMB単位のメモリを消費するものを使っていない →画像Imageの解放忘れの可能性が一番高いか →画像Iconを作成するために一度に100個程度の画像Imageを読んではDispose()しているが というような感じでProfile.Imageをキーワードにして処理ルーチンを見直します。 |