C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.30324 の関連記事表示

<< 0 >>
■30324  Re[5]: C++/CLIでメモリ解放が遅い
□投稿者/ Azulean -(2008/12/21(Sun) 10:39:38)
    > 例外でnewの部分自体がだめになるわけではないので、Disposeかファイナライザは必ず呼ばれます。
    「Dispose(デストラクタ)が必ず呼ばれる」ならOKですが、「Dispose(デストラクタ)が呼ばれなくても、ファイナライザが呼ばれるから大丈夫」ならNGです。

    ファイナライザが動くのはガベージコレクションが動いた後ということで、いつになるか分かりません。
    forループを抜けても、そのメソッドを抜けても、ファイナライザが呼ばれない可能性はあります。
    そのため、Disposeが途中で例外がスローされても呼び出されるようにしておかないと、アンマネージメモリ解放が遅くなる可能性があります。

    # Disposeはあくまでアンマネージリソースの解放タイミングを与えるものですので、マネージオブジェクトが巨大な場合は効果が薄いかも知れません。


    ところで、サンプルではデストラクタがファイナライザのコードを呼んでいますが、意味合いとしては分けた方が良いと思います。
    マネージオブジェクトの解放順は保障されていないため、コードの書き方によっては意図せぬ動作をする可能性があります。
    http://msdn.microsoft.com/ja-jp/library/system.object.finalize.aspx
記事No.30301 のレス /過去ログ54より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -