Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A korlátozott végrehajtási régió (CER) egy olyan mechanizmus része, amely megbízható felügyelt kódokat hoz létre. A TANÚSÍTVÁNY egy olyan területet határoz meg, amelyben a közös nyelvi futtatókörnyezet (CLR) korlátozva van abban, hogy sávon kívüli kivételeket dobjon ki, amelyek megakadályozzák a kód teljes körű végrehajtását a területen. Ezen a régión belül a felhasználói kód nem hajtható végre olyan kódot, amely sávon kívüli kivételeket eredményezne. A PrepareConstrainedRegions metódusnak közvetlenül egy try blokk előtt kell állnia, és úgy jelöli a catch, finally és fault blokkokat, mint korlátozott végrehajtási régiókat. Ha a kód korlátozott régióként van megjelölve, a kódnak csak erős megbízhatósági szerződéssel rendelkező más kódot kell meghívnia, és a kód nem foglalhat le és nem indíthat virtuális hívásokat felkészületlen vagy megbízhatatlan metódusokhoz, kivéve, ha a kód készen áll a hibák kezelésére. A CLR késlelteti a szálak megszakítását a CER-ben végrehajtott kód esetében.
Fontos
A CER csak a .NET-keretrendszerben támogatott. Ez a cikk nem vonatkozik a .NET Core vagy a .NET 5 vagy újabb verziókra.
A korlátozott végrehajtási régiókat a CLR-ben különböző formákban használják, a try blokkok jegyzetekkel ellátott formái mellett, különösen a CriticalFinalizerObject osztályból származó osztályokban futó kritikus lezárók és a ExecuteCodeWithGuaranteedCleanup metódussal futtatott kód esetében.
CER előzetes előkészítése
A CLR előre előkészíti a CER-eket a memóriatúlcsordulás elkerülése érdekében. Előzetes előkészítésre van szükség, hogy a CLR ne okozzon memóriakihasználtságot a megfelelő időben történő fordítás vagy típusbetöltés során.
A fejlesztőnek jeleznie kell, hogy a kódrégió cer:
A teljes hívási gráf legfelső szintű CER-régiója és metódusai, amelyekben az ReliabilityContractAttribute attribútum van alkalmazva, előre elkészülnek. A ReliabilityContractAttribute csak a Success vagy a MayFail garanciáit állíthatja.
Az előzetes előkészítés nem hajtható végre olyan hívások esetében, amelyek nem határozhatók meg statikusan, például virtuális küldéskor. Ilyen esetekben használja a PrepareMethod metódust. A metódus használatakor ExecuteCodeWithGuaranteedCleanup az PrePrepareMethodAttribute attribútumot a törlési kódra kell alkalmazni.
Megszorítások
A felhasználók a CER-ben írható kód típusában vannak korlátozva. A kód nem okozhat sávon kívüli kivételt, például a következő műveletekből eredhet:
Explicit kiosztás.
Ökölvívás.
Zár beszerzése.
A felkészületlen módszerek virtuális hívása.
Metódusok meghívása gyenge vagy nem létező megbízhatósági szerződéssel.
A .NET-keretrendszer 2.0-s verziójában ezek a korlátozások irányelvek. A diagnosztikát kódelemzési eszközök biztosítják.
Megbízhatósági szerződések
Ez ReliabilityContractAttribute egy egyéni attribútum, amely egy adott metódus megbízhatósági garanciáit és sérülési állapotát dokumentálja.
Megbízhatósági garanciák
A megbízhatósági garanciák enumerálási értékekkel jelölve Cer egy adott módszer megbízhatósági fokát jelzik:
MayFail. Kivételes körülmények között a módszer sikertelen lehet. Ebben az esetben a metódus visszaküldi a hívó metódusnak, hogy sikeres vagy sikertelen volt-e. A metódust egy CER-ben kell tárolni, hogy képes legyen a visszatérési érték jelentésére.
None. A módszernek, típusnak vagy szerelvénynek nincs fogalma a CER-ről, és nagy valószínűséggel nem biztonságos hívni egy CER-en belül anélkül, hogy jelentős mértékben mérsékelnék az állapot sérülésének kockázatát. Nem használja ki a CER-garanciákat. Ez a következőket jelenti:
Kivételes körülmények között a módszer sikertelen lehet.
Előfordulhat, hogy a metódus jelentést készít a kudarcáról, vagy nem.
A módszer nem CER használatára van megírva, ez a legvalószínűbb forgatókönyv.
Ha egy metódust, típust vagy szerelvényt nem határoz meg explicit módon a sikeresség érdekében, a metódus implicit módon a következőként Nonelesz azonosítva: .
Success. Kivételes körülmények között a módszer garantáltan sikeres lesz. Ennek a megbízhatósági szintnek a eléréséhez mindig konstruálnia kell egy CER-t a meghívott metódus köré, még akkor is, ha egy nem CER-régióból hívják. A módszer akkor sikeres, ha a célnak megfelelő eredményt ad, bár a siker szubjektív módon tekinthető meg. A Darabszám
ReliabilityContractAttribute(Cer.Success)megjelölése például azt jelenti, hogy ha CER alatt fut, az mindig visszaadja a ArrayList-ben lévő elemek számát, és soha nem hagyja határozatlan állapotban a belső mezőket. CompareExchange A módszer azonban sikerként is meg van jelölve, azzal a megértéssel, hogy a siker azt jelentheti, hogy az értéket nem lehet új értékre cserélni egy versenyfeltétel miatt. A lényeg az, hogy a metódus a dokumentált módon viselkedik, és a CER-kódot nem kell úgy írni, hogy szokatlan viselkedésre számítsunk, azon túl, amit a helyes, de megbízhatatlan kód mutathatna.
Korrupciós szintek
Az enumerálási értékekkel Consistency ábrázolt sérülési szintek azt jelzik, hogy egy adott környezetben mennyi állapot sérülhet meg:
MayCorruptAppDomain. Kivételes körülmények között a közös nyelvi futtatókörnyezet (CLR) nem garantálja az aktuális alkalmazástartomány állapotkonzisztenciáját.
MayCorruptInstance. Kivételes körülmények között az eljárás garantáltan az aktuális példányra korlátozza az állapotmegrongálódást.
MayCorruptProcesskivételes körülmények között a CLR nem vállal garanciát az állapotkonzisztenciára vonatkozóan; vagyis a feltétel ronthatja a folyamatot.
WillNotCorruptState. Kivételes körülmények között a módszer garantáltan nem rontja az állapotot.
Megbízhatósági próba/fogás/végül
A megbízhatóság try/catch/finally egy kivételkezelési mechanizmus, amely ugyanolyan szintű kiszámíthatóságot garantál, mint a nem felügyelt verzió. A catch/finally blokk a CER. A blokk metódusai előzetes előkészítést igényelnek, és nem lehetnek szünetmentesek.
A .NET-keretrendszer 2.0-s verziójában a kód tájékoztatja a futtatókörnyezetet, hogy a kipróbálás megbízható, ha közvetlenül a próbablokk előtt hívja PrepareConstrainedRegions meg. PrepareConstrainedRegions a fordító támogatási osztályának RuntimeHelperstagja. Közvetlenül hívhatja meg PrepareConstrainedRegions, amint elérhetővé válik a fordítók által.
Nem megszakítható régiók
A nem megszakítható régiók utasításkészleteket csoportosítanak egy CER-be.
A .NET Framework 2.0-s verziójában, amíg elérhető a fordító támogatása, a felhasználói kód nem megszakítható régiókat hoz létre egy megbízható try/catch/finally szerkezettel, amely egy PrepareConstrainedRegions metódushívás előtt lévő üres try/catch blokkot tartalmaz.
Kritikus véglegesítő objektum
A CriticalFinalizerObject garantálja, hogy a szemétgyűjtés végrehajtja a finalizálót. A kiosztáskor a véglegesítő és a hívási grafikon előre elkészül. A finalizer metódus cer-ben fut, és be kell tartania a CER-ekre és a véglegesítőkre vonatkozó összes korlátozást.
Minden SafeHandle és CriticalHandle típusból származó típus esetében garantált, hogy véglegesítőjük egy CER-en belül kerül végrehajtásra. Származtatott osztályokban ReleaseHandle implementálva SafeHandle végrehajthat minden olyan kódot, amely a leíró felszabadításához szükséges.
A CER-ben nem engedélyezett kód
A CER-ek nem engedélyezik a következő műveleteket:
Explicit elosztások.
Zár beszerzése.
Ökölvívás.
Többdimenziós tömbhozzáférés.
Metódushívások tükröződésen keresztül.
Biztonsági ellenőrzések. Ne végezzen követelményeket, csak kapcsolja össze a követelményeket.
Mezők beolvasása vagy beállítása transzparens proxy-n.
Szerializálás
Függvénymutatók és delegátumok.