SuppressGCTransitionAttribute Klasse

Definition

Gibt an, dass ein Garbage-Collection-Übergang übersprungen werden soll, wenn ein nicht verwalteter Funktionsaufruf erfolgt.

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
Vererbung
SuppressGCTransitionAttribute
Attribute

Hinweise

Dieses Attribut wird ignoriert, wenn es auf eine Methode ohne DllImportAttributeangewendet wird.

Der Verzicht auf diesen Übergang kann Vorteile bringen, wenn die Kosten des Übergangs höher sind als die Ausführungszeit der nicht verwalteten Funktion. Die Vermeidung dieses Übergangs beseitigt jedoch einige der Garantien, die die Runtime über einen normalen P/Invoke bietet. Wenn Sie die verwaltete Runtime beenden, um in eine nicht verwaltete Funktion einzutreten, muss die GC vom Kooperativen Modus in den präemptiven Modus übergehen. Ausführliche Informationen zu diesen Modi finden Sie unter https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8. Das Unterdrücken des Gc-Übergangs ist ein erweitertes Szenario und sollte nicht durchgeführt werden, ohne die möglichen Folgen vollständig zu verstehen.

Eine dieser Folgen ist eine Auswirkung auf das Debuggen im gemischten Modus. Beim Debuggen im gemischten Modus ist es nicht möglich, in einem P/Invoke-Objekt, das mit diesem Attribut markiert wurde, Breakpoints zu stufen oder festzulegen. Eine Problemumgehung besteht darin, zum nativen Debuggen zu wechseln und einen Haltepunkt in der nativen Funktion festzulegen. Im Allgemeinen wird die Verwendung dieses Attributs nicht empfohlen, wenn das Debuggen von P/Invoke wichtig ist, z. B. das Durchlaufen des systemeigenen Codes oder die Diagnose einer Ausnahme, die vom nativen Code ausgelöst wird.

Die P/Invoke-Methode, auf die dieses Attribut angewendet wird, muss über alle folgenden Eigenschaften verfügen:

  • Native Funktion wird immer für einen trivialen Zeitraum (weniger als 1 Mikrosekunde) ausgeführt.
  • Die native Funktion führt keinen blockierenden Syscall aus (z. B. ein beliebiger E/A-Typ).
  • Die native Funktion ruft nicht in die Runtime zurück (z. B. Reverse P/Invoke).
  • Native Funktion löst keine Ausnahmen aus.
  • Die native Funktion bearbeitet keine Sperren oder andere Parallelitätsgrundsätze.

Zu den Folgen ungültiger Verwendungen dieses Attributs gehören:

  • GC-Hunger.
  • Sofortige Laufzeitbeendigung.
  • Datenbeschädigung.

Das Anwenden dieses Attributs kann dazu führen, dass der P/Invoke-Export früher als Nebeneffekt der aufrufenden Methode gebunden wird, die JIT kompiliert wird. EntryPointNotFoundException oder andere Ausnahmen können früher ausgelöst werden, als wenn das Attribut nicht angewendet wird.

Konstruktoren

SuppressGCTransitionAttribute()

Instanzenkonstruktor.

Eigenschaften

TypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.

(Geerbt von Attribute)

Methoden

Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.

(Geerbt von Attribute)
GetHashCode()

Gibt den Hashcode für diese Instanz zurück.

(Geerbt von Attribute)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
IsDefaultAttribute()

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.

(Geerbt von Attribute)
Match(Object)

Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht.

(Geerbt von Attribute)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für: