SuppressGCTransitionAttribute Classe

Définition

Indique qu’une transition de garbage collection doit être ignorée lorsqu’un appel de fonction non managée est effectué.

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
Héritage
SuppressGCTransitionAttribute
Attributs

Remarques

Cet attribut est ignoré s’il est appliqué à une méthode sans .DllImportAttribute

La poursuite de cette transition peut produire des avantages lorsque le coût de la transition est supérieur à la durée d’exécution de la fonction non managée. Toutefois, le fait d’éviter cette transition supprime certaines des garanties que le runtime fournit par le biais d’un P/Invoke normal. Lorsque vous quittez le runtime managé pour entrer dans une fonction non managée, le gc doit passer du mode coopératif au mode préemptif. Pour plus d’informations sur ces modes, consultez https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8. La suppression de la transition du GC est un scénario avancé qui ne doit pas être effectué sans avoir pleinement compris les conséquences potentielles.

L’une de ces conséquences est un impact sur le débogage en mode mixte. Pendant le débogage en mode mixte, il n’est pas possible d’effectuer un pas à pas détaillé ou de définir des points d’arrêt dans un P/Invoke qui a été marqué avec cet attribut. Une solution de contournement consiste à basculer vers le débogage natif et à définir un point d’arrêt dans la fonction native. En général, l’utilisation de cet attribut n’est pas recommandée si le débogage du P/Invoke est important, par exemple, en parcourant le code natif ou en diagnosticant une exception levée à partir du code natif.

La méthode P/Invoke à laquelle cet attribut est appliqué doit avoir toutes les propriétés suivantes :

  • La fonction native s’exécute toujours pendant une durée triviale (moins de 1 microseconde).
  • La fonction native n’effectue pas de syscall bloquant (par exemple, tout type d’E/S).
  • La fonction native ne rappelle pas dans le runtime (par exemple, P/Invoke inversé).
  • La fonction native ne lève pas d’exceptions.
  • La fonction native ne manipule pas de verrous ou d’autres primitives d’accès concurrentiel.

Les conséquences des utilisations non valides de cet attribut sont les suivantes :

  • Faim de GC.
  • Arrêt immédiat du runtime.
  • Altération des données.

L’application de cet attribut peut entraîner la liaison de l’exportation P/Invoke précédemment en tant qu’effet secondaire de la méthode appelante compilée par JIT. EntryPointNotFoundException ou d’autres exceptions peuvent être levées plus tôt que lorsque l’attribut n’est pas appliqué.

Constructeurs

SuppressGCTransitionAttribute()

Constructeur d'instance.

Propriétés

TypeId

Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute.

(Hérité de Attribute)

Méthodes

Equals(Object)

Retourne une valeur qui indique si cette instance est égale à un objet spécifié.

(Hérité de Attribute)
GetHashCode()

Retourne le code de hachage de cette instance.

(Hérité de Attribute)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
IsDefaultAttribute()

En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut pour la classe dérivée.

(Hérité de Attribute)
Match(Object)

En cas de substitution dans une classe dérivée, retourne une valeur indiquant si cette instance équivaut à un objet spécifié.

(Hérité de Attribute)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à