Jazyk

SuppressGCTransitionAttribute Třída

Definice

Označuje, že při volání nespravované funkce by se měl přeskočit 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
SuppressGCTransitionAttribute
Atributy

Poznámky

Tento atribut je ignorován, pokud je použit na metodu DllImportAttributebez .

Pokud jsou náklady na přechod větší než doba provádění nespravované funkce, může tento přechod přinést výhody. Vyhnete se však tomuto přechodu, odeberete některé záruky, které modul runtime poskytuje prostřednictvím normálního volání nespravovaného kódu. Při ukončení spravovaného modulu runtime pro vstup do nespravované funkce musí GC 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 GC je pokročilý scénář a neměl by se provádět bez plného porozumění potenciálním důsledkům.

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é přejít k zarážce ani nastavit zarážky v volání P/, 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ě platí, že použití tohoto atributu se nedoporučuje, pokud je ladění volání nespravovaného kódu 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 se tento atribut vztahuje, musí mít všechny následující vlastnosti:

  • Nativní funkce se vždy spouští po triviální dobu (méně než 1 mikrosekund).
  • 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 nespravuje zámky ani jiné primitivy souběžnosti.

Mezi důsledky neplatného použití tohoto atributu patří:

  • Hladovění GC.
  • Okamžité ukončení modulu runtime.
  • Poškození dat

Použití tohoto atributu může způsobit, že export P/Invoke bude vázaný dříve jako vedlejší účinek volající metody, která je zkompilována JIT. EntryPointNotFoundException nebo jiné výjimky mohou být vyvolány dříve než v případě, že atribut není použit.

Konstruktory

Name Description
SuppressGCTransitionAttribute()

Konstruktor instance.

Vlastnosti

Name Description
TypeId

Při implementaci v odvozené třídě získá jedinečný identifikátor pro tento Attribute.

(Zděděno od Attribute)

Metody

Name Description
Equals(Object)

Vrátí hodnotu, která určuje, zda je tato instance rovna zadanému objektu.

(Zděděno od Attribute)
GetHashCode()

Vrátí kód hash pro tuto instanci.

(Zděděno od Attribute)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
IsDefaultAttribute()

Při přepsání v odvozené třídě určuje, zda hodnota této instance je 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á určuje, zda se tato instance rovná zadanému objektu.

(Zděděno od Attribute)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro