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 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 jest większy niż czas wykonywania funkcji niezarządzanej. Jednak unikanie tego przejścia powoduje usunięcie niektórych gwarancji, jakie zapewnia środowisko uruchomieniowe za pośrednictwem normalnego P/Invoke. Po wyjściu z zarządzanego środowiska uruchomieniowego w celu wprowadzenia funkcji niezarządzanej usługa GC musi przejść z trybu spółdzielni 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ściem jest przełączenie się na debugowanie natywne i ustawienie 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 krok po kodzie natywnym lub diagnozowanie wyjątku zgłaszanego z kodu natywnego.
Metoda P/Invoke zastosowana do tego atrybutu musi mieć wszystkie następujące właściwości:
- Funkcja natywna zawsze jest wykonywana przez trywialny czas (mniej niż 1 mikrosekunda).
- Funkcja natywna nie wykonuje blokującego wywołania systemu (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łowych zastosowań tego atrybutu obejmują:
- GC głodu.
- Natychmiastowe zakończenie czasu wykonywania.
- Uszkodzenie danych.
Zastosowanie tego atrybutu może spowodować, że eksport P/Invoke zostanie powiązany 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 elementu Attribute. (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 bieżące wystąpienie. (Odziedziczone po Object) |
IsDefaultAttribute() |
W przypadku zastąpienia w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej. (Odziedziczone po Attribute) |
Match(Object) |
W przypadku zastąpienia 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) |