SuppressGCTransitionAttribute Classe

Definição

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
SuppressGCTransitionAttribute
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)

Aplica-se a