SafeHandle.ReleaseHandleとは? わかりやすく解説

SafeHandle.ReleaseHandle メソッド

メモ : このメソッドは、.NET Framework version 2.0 で新しく追加されたものです。

派生クラスでオーバーライドされると、ハンドルを解放するために必要なコードを実行します。

名前空間: System.Runtime.InteropServices
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

解説解説

ReleaseHandle メソッドは、IsInvalid プロパティの定義に従いハンドルが有効である場合に限り、1 回だけ呼び出されることが保証されています。SafeHandle の派生クラスでこのメソッドを実装し、ハンドルを解放するために必要なコードを実行します。SafeHandle の関数のいずれかによって、リソース リークの防止が保証されるため、ReleaseHandle の実装のコードが失敗しないようにしてください。ガベージ コレクタは、同時に収集したオブジェクトに対して通常のファイナライザが実行された後に ReleaseHandle を呼び出すため、このメソッドを確実に呼び出し、メソッドの実行中にその動作が中断されないことがリソースに対して保証されます。このメソッドは、静的に決定可能な呼び出し先のすべてのメソッドと共に、インスタンス構築時に制約された実行領域 (CER: Constrained Execution Region) として用意されます。これにより、スレッドの中止によって処理が中断されることはなくなりますが、オーバーライドされた ReleaseHandle メソッドに違反パスが取り込まれないように注意する必要があります。特に、ReleaseHandle から呼び出すメソッドには、ReliabilityContractAttribute 属性を適用します。ほとんどの場合、このコードは次のようにする必要があります。

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

さらに、簡単なクリーンアップでは (ファイル ハンドルで Win32 API の CloseHandle を呼び出す場合など)、単一プラットフォーム呼び出しの戻り値をチェックできます。複雑なクリーンアップでは、多数のプログラム ロジックやメソッド呼び出しを使用できますが、それらの一部が失敗する場合もあります。プログラム ロジックでは、これらの各ケースに対するフォールバック コードを必ず用意するようにしてください。

何らかの理由で ReleaseHandle が false を返す場合、ReleaseHandleFailed マネージ デバッグ アシスタントが生成されます。これは、リソースの解放が失敗したケースを検出するうえで役立ちます。

使用例使用例

SafeHandle クラスを実装する方法を次のコード例に示します。

[DllImport("kernel32")]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
private static extern bool
 CloseHandle(IntPtr handle);

protected override bool ReleaseHandle()
{
    return CloseHandle(handle);
}
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
SafeHandle クラス
SafeHandle メンバ
System.Runtime.InteropServices 名前空間
その他の技術情報
マネージ デバッグ アシスタントによるエラーの診断
ReleaseHandleFailed

SafeHandle.ReleaseHandle メソッド




英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

SafeHandle.ReleaseHandleのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



SafeHandle.ReleaseHandleのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS