4

次の状況でメモリリークが発生するかどうかを調べています。

WebBrowserコントロールからウィンドウハンドルを取得しています(これには理由があります)

IntPtr p = webBrowser1.FindForm().Handle;

後で、オーバーライドされたdisposeメソッドでそのハンドルを解放します

    protected override void Dispose(bool disposing)
    {
        hwnd = IntPtr.Zero;
        base.Dispose(disposing);
    }

私のDisposeメソッドの背後に、メモリリークを引き起こす可能性のある何か悪がありますか?

これは一部の人にはかなり明白かもしれませんが、私はメモリリークを探しているので、コードのすべての行を検証しようとしています。

4

1 に答える 1

8

HWNDをIntPtr.Zeroに設定しても意味はありません。

IntPtrは値型であるため、その変数に値を含めることは何にも影響しません。オブジェクトを存続させることはありません。これは、0に設定している単なる数値です。

既存のウィンドウからHWNDを取得した場合、ハンドルが複製されていないはずであり、それを解放する必要はありません。フォームを閉じると、HWNDは破棄されます。

于 2012-10-19T18:37:30.147 に答える