RuntimeHelpers.PrepareConstrainedRegions Metoda

Definicja

Przestroga

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

Wyznacza treść kodu jako ograniczony region wykonywania (CER).

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

Przykłady

W poniższym przykładzie pokazano, jak niezawodnie ustawić uchwyty przy użyciu PrepareConstrainedRegions metody . Aby niezawodnie ustawić uchwyt na określony wstępnie istniejący uchwyt, należy upewnić się, że alokacja uchwytu natywnego i kolejne nagranie tego uchwytu w SafeHandle obiekcie jest niepodzielne. Wszelkie błędy między tymi operacjami (takie jak przerwanie wątku lub wyjątek poza pamięcią) spowodują wyciek uchwytu natywnego. Możesz użyć PrepareConstrainedRegions metody , aby upewnić się, że uchwyt nie wyciekł.

C#
[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;
    }

Uwagi

Kompilatory używają tej metody do oznaczania catch, finallyi fault bloków jako ograniczonych regionów wykonywania (CERs). Kod oznaczony jako region ograniczony musi wywoływać tylko inny kod z silnymi kontraktami niezawodności. Nie należy przydzielać ani wykonywać wywołań wirtualnych do nieprzygotowanych lub zawodnych metod, chyba że jest przygotowana do obsługi błędów.

Należy pamiętać, że żadne kody operacyjne języka pośredniego, z wyjątkiem NOP, są dozwolone między wywołaniem PrepareConstrainedRegions metody a blokiem try . Aby uzyskać więcej informacji na temat jednostek CERs, zobacz klasy w System.Runtime.ConstrainedExecution przestrzeni nazw.

Ściągnięcia oznaczone przy użyciu PrepareConstrainedRegions metody nie działają idealnie, gdy blok StackOverflowException jest generowany.try Aby uzyskać więcej informacji, zobacz metodę ExecuteCodeWithGuaranteedCleanup .

Metoda PrepareConstrainedRegions wywołuje metodę ProbeForSufficientStack .

Dotyczy

Produkt Wersje (Przestarzałe)
.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