Share via


RuntimeHelpers.PrepareConstrainedRegions Metode

Definisi

Perhatian

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

Menunjuk isi kode sebagai wilayah eksekusi yang dibatasi (CER).

public:
 static void PrepareConstrainedRegions();
[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 ();
[<System.Obsolete("The Constrained Execution Region (CER) feature is not supported.", DiagnosticId="SYSLIB0004", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
static member PrepareConstrainedRegions : unit -> unit
[<System.Security.SecurityCritical>]
static member PrepareConstrainedRegions : unit -> unit
static member PrepareConstrainedRegions : unit -> unit
Public Shared Sub PrepareConstrainedRegions ()
Atribut

Contoh

Contoh berikut menunjukkan cara mengatur handel dengan andal dengan menggunakan PrepareConstrainedRegions metode . Untuk mengatur handel dengan andal ke handel tertentu yang sudah ada sebelumnya, Anda harus memastikan bahwa alokasi handel asli dan rekaman berikutnya dari handel tersebut dalam SafeHandle objek adalah atomik. Setiap kegagalan antara operasi ini (seperti pengecualian pembatalan utas atau di luar memori) akan mengakibatkan handel asli bocor. Anda dapat menggunakan PrepareConstrainedRegions metode untuk memastikan bahwa handel tidak bocor.

[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;
    }
<StructLayout(LayoutKind.Sequential)> _
Structure MyStruct
    Public m_outputHandle As IntPtr
End Structure 'MyStruct


NotInheritable Class MySafeHandle
    Inherits SafeHandle

    ' Called by P/Invoke when returning SafeHandles
    Public Sub New()
        MyBase.New(IntPtr.Zero, True)

    End Sub


    Public Function AllocateHandle() As MySafeHandle
        ' Allocate SafeHandle first to avoid failure later.
        Dim sh As New MySafeHandle()

        RuntimeHelpers.PrepareConstrainedRegions()
        Try
        Finally
            Dim myStruct As New MyStruct()
            NativeAllocateHandle(myStruct)
            sh.SetHandle(myStruct.m_outputHandle)
        End Try

        Return sh

    End Function

Keterangan

Pengkompilasi menggunakan metode ini untuk menandai catch, finally, dan fault memblokir sebagai wilayah eksekusi yang dibatasi (CER). Kode yang ditandai sebagai wilayah yang dibatasi hanya boleh memanggil kode lain dengan kontrak keandalan yang kuat. Ini tidak boleh mengalokasikan atau melakukan panggilan virtual ke metode yang tidak siap atau tidak dapat diandalkan kecuali jika siap untuk menangani kegagalan.

Perhatikan bahwa tidak ada opkode bahasa perantara, kecuali NOP, diizinkan antara panggilan ke PrepareConstrainedRegions metode dan try blok . Untuk informasi selengkapnya tentang CER, lihat kelas di System.Runtime.ConstrainedExecution namespace.

CER yang ditandai menggunakan PrepareConstrainedRegions metode tidak berfungsi dengan sempurna ketika StackOverflowException dihasilkan dari try blok . Untuk informasi lebih lanjut, lihat ExecuteCodeWithGuaranteedCleanupmetodenya.

Metode ini PrepareConstrainedRegions memanggil ProbeForSufficientStack metode .

Berlaku untuk