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

L’annulation de cette transition peut générer des avantages lorsque le coût de la transition est supérieur au temps d’exécution de la fonction non managée. Toutefois, le fait d’éviter cette transition supprime certaines des garanties que le runtime fournit via un P/Invoke normal. Lors de la sortie du runtime managé pour entrer 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 gc est un scénario avancé qui ne doit pas être effectué sans comprendre pleinement 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’entrer ou de définir des points d’arrêt dans un P/Invoke 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 insignifiante (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 :

  • La famine du 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 à