SuppressGCTransitionAttribute Třída
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í.
Označuje, že při volání nespravované funkce by měl být vynechán přechod uvolňování paměti.
public ref class SuppressGCTransitionAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
public sealed class SuppressGCTransitionAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)>]
type SuppressGCTransitionAttribute = class
inherit Attribute
Public NotInheritable Class SuppressGCTransitionAttribute
Inherits Attribute
- Dědičnost
- Atributy
Poznámky
Tento atribut se ignoruje, pokud se použije na metodu bez DllImportAttribute.
Zpochybňování tohoto přechodu může přinést výhody, pokud jsou náklady na přechod delší než doba provádění nespravované funkce. Pokud se však tomuto přechodu vyhnete, odeberete některé záruky, které modul runtime poskytuje prostřednictvím normálního P/Invoke. Při ukončení spravovaného modulu runtime za účelem zadání nespravované funkce musí uvolňování paměti přejít z režimu spolupráce do preemptivního režimu. Úplné podrobnosti o těchto režimech najdete na adrese https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8. Potlačení přechodu uvolňování paměti je pokročilým scénářem a nemělo by se provádět bez úplného pochopení možných důsledků.
Jedním z těchto důsledků je dopad na ladění ve smíšeném režimu. Během ladění ve smíšeném režimu není možné zakročit do zarážky nebo nastavit zarážky v P/Invoke, které byly označeny tímto atributem. Alternativním řešením je přepnout na nativní ladění a nastavit zarážku v nativní funkci. Obecně se použití tohoto atributu nedoporučuje, pokud je ladění P/Invoke důležité, například procházení nativního kódu nebo diagnostika výjimky vyvolané z nativního kódu.
Metoda P/Invoke, na kterou je tento atribut použit, musí mít všechny následující vlastnosti:
- Nativní funkce se vždy spustí po triviální dobu (méně než 1 mikrosekundu).
- Nativní funkce neprovádí blokující syscall (například žádný typ vstupně-výstupních operací).
- Nativní funkce nevolá zpět do modulu runtime (například Reverse P/Invoke).
- Nativní funkce nevyvolá výjimky.
- Nativní funkce nemanipuluje se zámky ani jinými primitivy souběžnosti.
Mezi důsledky neplatného použití tohoto atributu patří:
- GC hladovění.
- Okamžité ukončení modulu runtime.
- Poškození dat.
Použití tohoto atributu může způsobit, že export P/Invoke bude vázán dříve jako vedlejší účinek metody volání, která je kompilována JIT. EntryPointNotFoundException nebo jiné výjimky mohou být vyvolány dříve, než když atribut není použit.
Konstruktory
SuppressGCTransitionAttribute() |
Konstruktor instance. |
Vlastnosti
TypeId |
Při implementaci v odvozené třídě získá jedinečný identifikátor pro tuto Attributetřídu . (Zděděno od Attribute) |
Metody
Equals(Object) |
Vrací hodnotu, která určuje, zda je tato instance rovna zadanému objektu. (Zděděno od Attribute) |
GetHashCode() |
Vrátí hodnotu hash pro tuto instanci. (Zděděno od Attribute) |
GetType() |
Získá aktuální Type instanci. (Zděděno od Object) |
IsDefaultAttribute() |
Při přepsání v odvozené třídě označuje, zda je hodnota této instance výchozí hodnotou pro odvozenou třídu. (Zděděno od Attribute) |
Match(Object) |
Při přepsání v odvozené třídě vrátí hodnotu, která označuje, zda se tato instance rovná zadanému objektu. (Zděděno od Attribute) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |