SuppressGCTransitionAttribute Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
- 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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla