Sdílet prostřednictvím


Oblasti omezeného provádění

Oblast omezeného spouštění (CER) je součástí mechanismu pro vytváření spolehlivého spravovaného kódu. Cer definuje oblast, ve které je modul CLR (Common Language Runtime) omezený z vyvolání výjimek mimo pásma, které by zabránilo spuštění kódu v oblasti v celé oblasti. V této oblasti je uživatelský kód omezen spuštěním kódu, který by vedlo k vyvolání výjimek mimo pásmo. Metoda PrepareConstrainedRegions musí bezprostředně před blok a značky trycatch, finallya fault bloky jako omezené oblasti provádění. Jakmile je kód označený jako omezená oblast, musí volat pouze jiný kód se silnými kontrakty spolehlivosti a kód by neměl přidělovat ani provádět virtuální volání pro nepřipravené nebo nespolehlivé metody, pokud kód není připravený na zpracování selhání. CLR zpožďuje přerušení vlákna pro kód, který se spouští v CER.

Důležité

Cer je podporován pouze v rozhraní .NET Framework. Tento článek se nevztahuje na .NET Core nebo .NET 5 a vyšší.

Oblasti omezeného spouštění se používají v různých formách modulu CLR kromě bloku s poznámkami try , zejména kritické finalizátory spouštěné ve třídách odvozených z CriticalFinalizerObject třídy a kódu spouštěné pomocí ExecuteCodeWithGuaranteedCleanup metody.

Příprava předem na CER

MODUL CLR předem připraví CER, aby se zabránilo nedostatku paměti. Vyžaduje se pokročilá příprava, takže CLR nezpůsobí nedostatek paměti během kompilace za běhu nebo načítání typu.

Vývojář musí označit, že oblast kódu je CER:

Omezení

Uživatelé jsou omezeni typem kódu, který můžou psát v CER. Kód nemůže způsobit výjimku mimo pásmo, například z následujících operací:

  • Explicitní přidělení

  • Boxu.

  • Získánízámkuho

  • Virtuální volání nepřipravených metod.

  • Volání metod se slabým nebo neexistující kontraktem spolehlivosti

V rozhraní .NET Framework verze 2.0 jsou tato omezení pokyny. Diagnostika se poskytuje prostřednictvím nástrojů pro analýzu kódu.

Smlouvy o spolehlivosti

Jedná se ReliabilityContractAttribute o vlastní atribut, který dokumentuje záruky spolehlivosti a stav poškození dané metody.

Záruky spolehlivosti

Záruky spolehlivosti reprezentované Cer hodnotami výčtu označují stupeň spolehlivosti dané metody:

  • MayFail. Za výjimečných podmínek může metoda selhat. V tomto případě metoda hlásí zpět volající metodu bez ohledu na to, zda byla úspěšná nebo neúspěšná. Metoda musí být obsažena v CER, aby se zajistilo, že může hlásit návratovou hodnotu.

  • None. Metoda, typ nebo sestavení nemá žádný koncept CER a s největší pravděpodobností není bezpečné volat v rámci CER bez podstatného zmírnění rizika poškození stavu. Nevyužívá záruky CER. To znamená následující:

    1. Za výjimečných podmínek může metoda selhat.

    2. Metoda může nebo nemusí nahlásit, že selhala.

    3. Metoda není zapsána pro použití CER, nejpravděpodobnější scénář.

    4. Pokud metoda, typ nebo sestavení není explicitně identifikována k úspěchu, je implicitně identifikována jako None.

  • Success. Za výjimečných podmínek je zaručeno, že metoda bude úspěšná. Pokud chcete dosáhnout této úrovně spolehlivosti, měli byste vždy vytvořit CER kolem volané metody, i když je volána z oblasti, která není cer. Metoda je úspěšná, pokud dosáhne toho, co je zamýšleno, i když úspěch lze zobrazit subjektivním způsobem. Označení Count například ReliabilityContractAttribute(Cer.Success) znamená, že když je spuštěn pod CER, vrátí vždy počet prvků v objektu ArrayList a nikdy nemůže opustit interní pole v nedeterminované stavu. Metoda CompareExchange je však označena také jako úspěch, s pochopením, že úspěch může znamenat, že hodnota nemohla být nahrazena novou hodnotou kvůli konfliktu časování. Klíčovým bodem je, že metoda se chová způsobem, jakým se chová, a kód CER nemusí být zapsán tak, aby očekával neobvyklé chování nad rámec toho, jak správný, ale nespolehlivý kód by vypadal.

Úrovně poškození

Úrovně poškození reprezentované Consistency hodnotami výčtu označují, kolik stavu může být v daném prostředí poškozeno:

  • MayCorruptAppDomain. Za výjimečných podmínek modul CLR (Common Language Runtime) neposkytuje žádné záruky týkající se konzistence stavu v aktuální doméně aplikace.

  • MayCorruptInstance. Za výjimečných podmínek je zaručeno, že metoda omezí poškození stavu na aktuální instanci.

  • MayCorruptProcessza výjimečných podmínek neposkytuje CLR žádné záruky týkající se konzistence stavu; to znamená, že podmínka může poškodit proces.

  • WillNotCorruptState. Za výjimečných podmínek je zaručeno, že není poškozena.

Pokus o spolehlivost/ zachycení/ nakonec

Spolehlivost try/catch/finally je mechanismus zpracování výjimek se stejnou úrovní záruk předvídatelnosti jako nespravovaná verze. Blok catch/finally je CER. Metody v bloku vyžadují pokročilou přípravu a musí být nepřerušitelné.

V rozhraní .NET Framework verze 2.0 kód informuje modul runtime, že pokus je spolehlivý voláním PrepareConstrainedRegions bezprostředně před blokem try. PrepareConstrainedRegions je členem RuntimeHelperstřídy podpory kompilátoru. Volání PrepareConstrainedRegions přímo čeká na dostupnost prostřednictvím kompilátorů.

Neinterruptovatelné oblasti

Neinterruptovatelná oblast seskupí sadu instrukcí do CER.

V rozhraní .NET Framework verze 2.0, čeká na dostupnost prostřednictvím podpory kompilátoru, uživatelský kód vytvoří nepřerušitelné oblasti se spolehlivým try/catch/finally, který obsahuje prázdný blok try/catch před voláním PrepareConstrainedRegions metody.

Objekt kritické finalizátoru

Zaručuje CriticalFinalizerObject , že uvolňování paměti provede finalizační metodu. Po přidělení se finalizátor a jeho graf volání připraví předem. Metoda finalizátoru se provádí v CER a musí dodržovat všechna omezení CERs a finalizační metody.

U všech typů, ze SafeHandle kterých se dědí, a CriticalHandle je zaručeno, že se jejich finalizační metodu spustí v rámci CER. Implementujte ReleaseHandle v SafeHandle odvozených třídách, aby se spustil jakýkoli kód, který je nutný k uvolnění popisovače.

Kód není povolen v CERS

V CER nejsou povoleny následující operace:

  • Explicitní přidělení

  • Získánízámkuho

  • Boxu.

  • Přístup k vícerozměrným polím

  • Volání metod prostřednictvím reflexe

  • Enter nebo Lock.

  • Kontroly zabezpečení. Neprovádějte požadavky, pouze požadavky propojení.

  • Isinst a Castclass pro objekty a proxy servery modelu COM

  • Získání nebo nastavení polí na transparentním proxy serveru

  • Serializace.

  • Ukazatele funkcí a delegáti.

Viz také