RuntimeHelpers.PrepareConstrainedRegions Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Upozornění
The Constrained Execution Region (CER) feature is not supported.
Určuje tělo kódu jako oblast omezeného spuštění (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 ()
- Atributy
Příklady
Následující příklad ukazuje, jak spolehlivě nastavit popisovače pomocí PrepareConstrainedRegions metody. Chcete-li spolehlivě nastavit popisovač na zadaný před existující popisovač, je nutné zajistit, aby přidělení nativního popisovače a následné nahrávání tohoto popisovače v objektu SafeHandle bylo atomické. Jakékoli selhání mezi těmito operacemi (například přerušením vlákna nebo výjimkou mimo paměť) způsobí únik nativního popisovače. Pomocí této metody se můžete PrepareConstrainedRegions ujistit, že popisovač neunikl.
[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
Poznámky
Kompilátory používají tuto metodu k označení catch, finallya fault bloků jako omezených oblastí provádění (CERS). Kód, který je označený jako omezená oblast, musí volat pouze jiný kód se silnými kontrakty spolehlivosti. Neměl by přidělovat ani provádět virtuální volání nepřipraveným nebo nespolehlivým metodám, pokud není připraven ke zpracování selhání.
Všimněte si, že mezi voláním NOP metody a PrepareConstrainedRegions bloku nejsou povoleny žádné zprostředkující kódy jazyka, s výjimkou try. Další informace o CERS naleznete v třídách System.Runtime.ConstrainedExecution v oboru názvů.
CERS, které jsou označeny pomocí PrepareConstrainedRegions metody, nefungují dokonale, když StackOverflowException je vygenerován z try bloku. Další informace najdete v metodě ExecuteCodeWithGuaranteedCleanup.
Metoda PrepareConstrainedRegions volá metodu ProbeForSufficientStack .