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 APICloseHandle呼び出す場合など)、単一プラットフォーム呼び出し戻り値チェックできます複雑なクリーンアップでは、多数プログラム ロジックメソッド呼び出し使用できますが、それらの一部失敗する場合ありますプログラム ロジックでは、これらの各ケース対すフォールバック コードを必ず用意するようにしてください

何らかの理由ReleaseHandlefalse返す場合、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 メソッド




英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

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

   

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



SafeHandle.ReleaseHandleのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

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

©2025 GRAS Group, Inc.RSS