SuppressGCTransitionAttribute Klasa

Definicja

Wskazuje, że przejście do odzyskiwania pamięci powinno zostać pominięte, gdy zostanie wykonane niezarządzane wywołanie funkcji.

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
Dziedziczenie
SuppressGCTransitionAttribute
Atrybuty

Uwagi

Ten atrybut jest ignorowany w przypadku zastosowania do metody bez DllImportAttribute.

To przejście może przynieść korzyści, gdy koszt przejścia przekracza czas wykonywania niezarządzanej funkcji. Jednak uniknięcie tego przejścia powoduje usunięcie niektórych gwarancji zapewnianych przez środowisko uruchomieniowe za pośrednictwem normalnego wywołania P/Invoke. Po wyjściu z zarządzanego środowiska uruchomieniowego w celu wprowadzenia funkcji niezarządzanej GC musi przejść z trybu współpracy do trybu preemptive. Szczegółowe informacje na temat tych trybów można znaleźć na stronie https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8. Pomijanie przejścia GC jest zaawansowanym scenariuszem i nie powinno być wykonywane bez pełnego zrozumienia potencjalnych konsekwencji.

Jedną z tych konsekwencji jest wpływ na debugowanie w trybie mieszanym. Podczas debugowania w trybie mieszanym nie można przejść do ani ustawić punktów przerwania w P/Invoke, który został oznaczony za pomocą tego atrybutu. Obejście polega na przełączeniu się na debugowanie natywne i ustawieniu punktu przerwania w funkcji natywnej. Ogólnie rzecz biorąc, użycie tego atrybutu nie jest zalecane, jeśli debugowanie P/Invoke jest ważne, na przykład przechodzenie przez kod natywny lub diagnozowanie wyjątku wyrzuconego z kodu natywnego.

Metoda P/Invoke, do którego zastosowano ten atrybut, musi mieć wszystkie następujące właściwości:

  • Funkcja natywna zawsze jest wykonywana przez banalny czas (mniej niż 1 mikrosekunda).
  • Funkcja natywna nie wykonuje blokującego elementu syscall (na przykład dowolnego typu we/wy).
  • Funkcja natywna nie wywołuje z powrotem do środowiska uruchomieniowego (na przykład Reverse P/Invoke).
  • Funkcja natywna nie zgłasza wyjątków.
  • Funkcja natywna nie manipuluje blokadami ani innymi elementami pierwotnymi współbieżności.

Konsekwencje nieprawidłowego użycia tego atrybutu obejmują:

  • GC głodu.
  • Natychmiastowe zakończenie działania.
  • Uszkodzenie danych.

Zastosowanie tego atrybutu może spowodować powiązanie eksportu P/Invoke wcześniej jako efekt uboczny skompilowanej metody wywołującej JIT. EntryPointNotFoundException lub inne wyjątki mogą być zgłaszane wcześniej niż wtedy, gdy atrybut nie jest stosowany.

Konstruktory

SuppressGCTransitionAttribute()

Konstruktor wystąpienia.

Właściwości

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attributeelementu .

(Odziedziczone po Attribute)

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca wartość skrótu dla tego wystąpienia.

(Odziedziczone po Attribute)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
IsDefaultAttribute()

Podczas zastępowania w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla klasy pochodnej.

(Odziedziczone po Attribute)
Match(Object)

Po przesłonięciu w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi.

(Odziedziczone po Attribute)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy