RuntimeHelpers.PrepareConstrainedRegions Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Внимание!
The Constrained Execution Region (CER) feature is not supported.
Назначает основную часть кода как область с ограничением исполнения (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 ()
- Атрибуты
Примеры
В следующем примере показано, как надежно задать дескриптор с помощью 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;
}
<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
Комментарии
Компиляторы используют этот метод, чтобы помечать catch
блоки , finally
и fault
как ограниченные области выполнения (CER). Код, помеченный как ограниченный регион, должен вызывать только другой код со строгими контрактами надежности. Он не должен выделять или выполнять виртуальные вызовы неподготовленных или ненадежных методов, если он не подготовлен к обработке сбоев.
Обратите внимание, что между вызовом метода и блока не допускаются коды операций промежуточного PrepareConstrainedRegionstry
языка, кроме NOP
. Дополнительные сведения о cer см. в разделе классы в System.Runtime.ConstrainedExecution пространстве имен.
CeR, помеченные с помощью PrepareConstrainedRegions метода , не работают идеально при StackOverflowException создании из try
блока . Дополнительные сведения см. в описании метода ExecuteCodeWithGuaranteedCleanup.
Метод PrepareConstrainedRegions вызывает метод ProbeForSufficientStack.
Применяется к
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по