SuppressGCTransitionAttribute Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Permite indicar que se debe evitar una transición de recolección de elementos no utilizados cuando se realiza una llamada de función no administrada.
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
- Herencia
- Atributos
Comentarios
Este atributo se omite si se aplica a un método sin DllImportAttribute.
Forgo de esta transición puede producir ventajas cuando el costo de la transición es mayor que el tiempo de ejecución de la función no administrada. Sin embargo, evitar esta transición quita algunas de las garantías que proporciona el tiempo de ejecución a través de una P/Invoke normal. Al salir del entorno de ejecución administrado para entrar en una función no administrada, el GC debe pasar del modo cooperativo al modo preferente. Encontrará detalles completos sobre estos modos en https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8. Suprimir la transición de GC es un escenario avanzado y no debe realizarse sin comprender completamente las posibles consecuencias.
Una de estas consecuencias es un impacto en la depuración en modo mixto. Durante la depuración en modo mixto, no es posible depurar paso a paso por instrucciones ni establecer puntos de interrupción en una P/Invoke que se haya marcado con este atributo. Una solución alternativa consiste en cambiar a la depuración nativa y establecer un punto de interrupción en la función nativa. En general, no se recomienda el uso de este atributo si la depuración de P/Invoke es importante, por ejemplo, recorrer el código nativo o diagnosticar una excepción producida desde el código nativo.
El método P/Invoke al que se aplica este atributo debe tener todas las propiedades siguientes:
- La función nativa siempre se ejecuta durante una cantidad trivial de tiempo (menos de 1 microsegundos).
- La función nativa no realiza una llamada syscall de bloqueo (por ejemplo, cualquier tipo de E/S).
- La función nativa no vuelve a llamar al tiempo de ejecución (por ejemplo, P/Invoke inverso).
- La función nativa no produce excepciones.
- La función nativa no manipula bloqueos ni otros primitivos de simultaneidad.
Entre las consecuencias de los usos no válidos de este atributo se incluyen las siguientes:
- Hambre de GC.
- Finalización inmediata del tiempo de ejecución.
- Daños en los datos.
Aplicar este atributo puede hacer que la exportación de P/Invoke se enlace anteriormente como un efecto secundario del método de llamada que se compila JIT. EntryPointNotFoundException u otras excepciones se pueden producir antes que cuando no se aplica el atributo.
Constructores
SuppressGCTransitionAttribute() |
Constructor de instancia. |
Propiedades
TypeId |
Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute. (Heredado de Attribute) |
Métodos
Equals(Object) |
Devuelve un valor que indica si esta instancia es igual que un objeto especificado. (Heredado de Attribute) |
GetHashCode() |
Devuelve el código hash de esta instancia. (Heredado de Attribute) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
IsDefaultAttribute() |
Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada. (Heredado de Attribute) |
Match(Object) |
Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado. (Heredado de Attribute) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |