英語で読む

次の方法で共有


RuntimeHelpers.PrepareConstrainedRegions メソッド

定義

注意事項

The Constrained Execution Region (CER) feature is not supported.

コード本体を制約された実行領域 (CER) として指定します。

[System.Obsolete("The Constrained Execution Region (CER) feature is not supported.", DiagnosticId="SYSLIB0004", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void PrepareConstrainedRegions ();
[System.Security.SecurityCritical]
public static void PrepareConstrainedRegions ();
public static void PrepareConstrainedRegions ();
属性

次の例は、 メソッドを使用してハンドルを確実に設定する方法を PrepareConstrainedRegions 示しています。 指定した既存のハンドルにハンドルを確実に設定するには、ネイティブ ハンドルの割り当てと、オブジェクト内 SafeHandle でのそのハンドルの後続の記録がアトミックであることを確認する必要があります。 これらの操作 (スレッドの中止やメモリ不足の例外など) の間でエラーが発生すると、ネイティブ ハンドルがリークされます。 メソッドを PrepareConstrainedRegions 使用して、ハンドルがリークされていないことを確認できます。

[StructLayout(LayoutKind.Sequential)]
struct MyStruct
{
    public IntPtr m_outputHandle;
}

sealed class MySafeHandle : SafeHandle
{
    // Called by P/Invoke when returning SafeHandles
    public MySafeHandle()
        : base(IntPtr.Zero, true)
    {
    }

    public MySafeHandle AllocateHandle()
    {
        // Allocate SafeHandle first to avoid failure later.
        MySafeHandle sh = new MySafeHandle();

        RuntimeHelpers.PrepareConstrainedRegions();
        try { }
        finally
        {
            MyStruct myStruct = new MyStruct();
            NativeAllocateHandle(ref myStruct);
            sh.SetHandle(myStruct.m_outputHandle);
        }

        return sh;
    }

注釈

コンパイラは、このメソッドを使用して、、finally、および fault ブロックを制約付き実行領域 (CER) としてマークcatchします。 制約付きリージョンとしてマークされているコードは、信頼性コントラクトが強力な他のコードのみを呼び出す必要があります。 エラーを処理する準備が整っていない限り、準備されていないメソッドまたは信頼性の低いメソッドに対して仮想呼び出しを割り当てたり、仮想呼び出しを行ったりしないでください。

メソッドと try ブロックの呼び出しPrepareConstrainedRegionsの間に、 を除くNOP中間言語オペコードは許可されません。 CER の詳細については、 名前空間のクラスに関するページを System.Runtime.ConstrainedExecution 参照してください。

メソッドを使用して PrepareConstrainedRegions マークされた CER は、 が ブロックから生成されると StackOverflowException 完全には try 機能しません。 詳細については、ExecuteCodeWithGuaranteedCleanup メソッドを参照してください。

PrepareConstrainedRegions メソッドは ProbeForSufficientStack メソッドを呼び出します。

適用対象

製品 バージョン (廃止)
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1 (5, 6, 7, 8, 9)
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1