RuntimeHelpers.PrepareConstrainedRegions Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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 .