Condividi tramite


SuppressGCTransitionAttribute Classe

Definizione

Indica che una transizione di Garbage Collection deve essere ignorata 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 creazione di questa transizione può offrire vantaggi quando il costo della transizione è maggiore del tempo di esecuzione della funzione non gestita. Tuttavia, evitando questa transizione, alcune delle garanzie fornite dal runtime tramite un normale P/Invoke. Quando si chiude il runtime gestito per immettere una funzione non gestita, la GC deve passare dalla modalità cooperative alla modalità preemptive. I dettagli completi su queste modalità sono disponibili in 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 completamente 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 oggetto 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 applicato a questo attributo deve avere tutte le proprietà seguenti:

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

Le conseguenze dell'uso non valido di questo attributo includono:

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

L'applicazione di questo attributo può causare l'associazione dell'esportazione P/Invoke in precedenza come effetto collaterale del metodo chiamante compilato da JIT. EntryPointNotFoundException o altre eccezioni potrebbero 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