SuppressGCTransitionAttribute Classe

Definizione

Indica che è necessario ignorare una transizione di Garbage Collection quando viene eseguita una chiamata di funzione non gestita.

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
Ereditarietà
SuppressGCTransitionAttribute
Attributi

Commenti

Questo attributo viene ignorato se applicato a un metodo senza .DllImportAttribute

La rinuncia a questa transizione può produrre vantaggi quando il costo della transizione è superiore al tempo di esecuzione della funzione non gestita. Tuttavia, evitando questa transizione, vengono rimosse alcune delle garanzie fornite dal runtime tramite un P/Invoke normale. Quando si esce dal runtime gestito per accedere a una funzione non gestita, GC deve passare dalla modalità Cooperativa alla modalità Preemptive. Per informazioni dettagliate su queste modalità, vedere https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8. L'eliminazione della transizione GC è uno scenario avanzato e non deve essere eseguita senza comprendere appieno le potenziali conseguenze.

Una di queste conseguenze è un impatto sul debug in modalità mista. Durante il debug in modalità mista non è possibile eseguire o impostare punti di interruzione in un P/Invoke contrassegnato con questo attributo. Una soluzione alternativa consiste nel passare al debug nativo e impostare un punto di interruzione nella funzione nativa. In generale, l'utilizzo di questo attributo non è consigliato se il debug di P/Invoke è importante, ad esempio, l'esecuzione del codice nativo o la diagnosi di un'eccezione generata dal codice nativo.

Il metodo P/Invoke a cui è applicato questo attributo deve avere tutte le proprietà seguenti:

  • La funzione nativa viene sempre eseguita per una quantità di tempo semplice (minore di 1 microsecondo).
  • La funzione nativa non esegue una chiamata di sistema di blocco, ad esempio qualsiasi tipo di I/O.
  • La funzione nativa non viene richiamata nel runtime ( ad esempio, P/Invoke inverso).
  • La funzione nativa non genera eccezioni.
  • La funzione nativa non modifica i blocchi o altre primitive di concorrenza.

Le conseguenze di usi non validi di questo attributo includono:

  • GC fame.
  • Terminazione immediata del runtime.
  • Danneggiamento dei dati.

L'applicazione di questo attributo può causare il binding dell'esportazione P/Invoke in precedenza come effetto collaterale della compilazione JIT del metodo chiamante. EntryPointNotFoundException o altre eccezioni possono essere generate in precedenza rispetto a quando l'attributo non viene applicato.

Costruttori

SuppressGCTransitionAttribute()

Costruttore di istanze.

Proprietà

TypeId

Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute.

(Ereditato da Attribute)

Metodi

Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per l'istanza.

(Ereditato da Attribute)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

In caso di override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.

(Ereditato da Attribute)
Match(Object)

Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a