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.

Ein Verzicht auf diesen Übergang kann Vorteile bringen, wenn die Kosten für den Übergang größer sind als die Ausführungszeit der nicht verwalteten Funktion. Wenn Sie diesen Übergang vermeiden, werden jedoch einige der Garantien entfernt, die die Laufzeit ü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 wechseln. 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 fortgeschrittenes Szenario und sollte nicht durchgeführt werden, ohne die potenziellen Konsequenzen vollständig zu verstehen.

Eine dieser Folgen ist eine Auswirkung auf das Debuggen im gemischten Modus. Während des Debuggens im gemischten Modus ist es nicht möglich, in einem P/Invoke-Objekt, das mit diesem Attribut markiert wurde, breakpoints zu durchlaufen oder breakpoints 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. schrittweises Durchlaufen des nativen Codes oder Diagnostizieren 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:

  • Die systemeigene Funktion wird immer für einen trivialen Zeitraum (weniger als 1 Mikrosekunde) ausgeführt.
  • Die systemeigene 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).
  • Die systemeigene Funktion löst keine Ausnahmen aus.
  • Die systemeigene Funktion bearbeitet keine Sperren oder andere Parallelitätsgrundtypen.

Zu den Folgen einer ungültigen Verwendung 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 gebunden wird, als Nebeneffekt der JIT-Kompilierung der aufrufenden Methode. EntryPointNotFoundException oder andere Ausnahmen können früher als ausgelöst werden, 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: