SuppressGCTransitionAttribute Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Indica que uma transição de recolha de lixo deve ser ignorada quando é feita uma chamada de função não gerida.
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
- Herança
- Atributos
Observações
Este atributo é ignorado se aplicado a um método sem o DllImportAttribute.
Renunciar a esta transição pode trazer benefícios quando o custo da transição é superior ao tempo de execução da função não gerida. No entanto, evitar esta transição remove algumas das garantias que o tempo de execução fornece através de um P/Invoke normal. Ao sair do tempo de execução gerido para entrar numa função não gerida, o GC deve transitar do modo Cooperativo para o modo Preemptivo. Detalhes completos sobre estes modos podem ser encontrados em https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8. Suprimir a transição da GC é um cenário avançado e não deve ser feito sem compreender plenamente as potenciais consequências.
Uma dessas consequências é um impacto na depuração em modo misto. Durante a depuração em modo misto, não é possível entrar ou definir breakpoints num P/Invoke que tenha sido marcado com este atributo. Uma solução alternativa é mudar para depuração nativa e definir um ponto de interrupção na função nativa. Em geral, o uso deste atributo não é recomendado se a depuração do P/Invoke for importante, por exemplo, percorrer o código nativo ou diagnosticar uma exceção lançada a partir do código nativo.
O método P/Invoke ao qual este atributo é aplicado deve ter todas as seguintes propriedades:
- A função nativa executa-se sempre durante um tempo trivial (menos de 1 microssegundo).
- A função nativa não realiza uma chamada de sistema bloqueante (por exemplo, qualquer tipo de E/S).
- A função nativa não retorna ao runtime (por exemplo, Reverse P/Invoke).
- A função nativa não lança exceções.
- A função nativa não manipula bloqueios ou outras primitivas de concorrência.
As consequências de usos inválidos deste atributo incluem:
- Fome de GC.
- Terminação imediata em tempo de execução.
- Corrupção de dados.
Aplicar este atributo pode fazer com que a exportação P/Invoke seja vinculada mais cedo como efeito secundário do método que chama ser compilado com JIT. EntryPointNotFoundException ou outras exceções podem ser lançadas mais cedo do que quando o atributo não é aplicado.
Construtores
| Name | Description |
|---|---|
| SuppressGCTransitionAttribute() |
Construtor de instâncias. |
Propriedades
| Name | Description |
|---|---|
| TypeId |
Quando implementado numa classe derivada, obtém um identificador único para esta Attribute. (Herdado de Attribute) |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Devolve um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute) |
| GetHashCode() |
Devolve o código de hash para esta instância. (Herdado de Attribute) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| IsDefaultAttribute() |
Quando sobrescrito numa classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada. (Herdado de Attribute) |
| Match(Object) |
Quando sobrescrito numa classe derivada, devolve um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |