Compartilhar via


SuppressGCTransitionAttribute Classe

Definição

Indica que uma transição de coleta de lixo deverá ser ignorada quando uma chamada de função não gerenciada for feita.

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

Comentários

Esse atributo será ignorado se aplicado a um método sem o DllImportAttribute.

Renunciar a essa transição pode gerar benefícios quando o custo da transição for maior do que o tempo de execução da função não gerenciada. No entanto, evitar essa transição remove algumas das garantias que o runtime fornece por meio de um P/Invoke normal. Ao sair do runtime gerenciado para inserir uma função não gerenciada, o GC deve fazer a transição do modo Cooperativo para o modo Preemptivo. Detalhes completos sobre esses 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 do GC é um cenário avançado e não deve ser feito sem entender totalmente as possíveis consequências.

Uma dessas consequências é um impacto na depuração de modo misto. Durante a depuração de modo misto, não é possível intervir ou definir pontos de interrupção em um P/Invoke que tenha sido marcado com esse atributo. Uma solução alternativa é alternar para a depuração nativa e definir um ponto de interrupção na função nativa. Em geral, o uso desse atributo não será recomendado se a depuração do P/Invoke for importante, por exemplo, percorrer o código nativo ou diagnosticar uma exceção gerada do código nativo.

O método P/Invoke ao qual esse atributo é aplicado deve ter todas as seguintes propriedades:

  • A função nativa sempre é executada por um período trivial de tempo (menos de 1 microssegundo).
  • A função nativa não executa uma syscall de bloqueio (por exemplo, qualquer tipo de E/S).
  • A função nativa não chama de volta para o runtime (por exemplo, Inverter P/Invoke).
  • A função nativa não gera exceções.
  • A função nativa não manipula bloqueios ou outros primitivos de simultaneidade.

As consequências dos usos inválidos desse atributo incluem:

  • Fome de GC.
  • Encerramento imediato do runtime.
  • Dados corrompidos.

A aplicação desse atributo pode fazer com que a exportação P/Invoke seja associada anteriormente como um efeito colateral do método de chamada que está sendo compilado JIT. EntryPointNotFoundException ou outras exceções podem ser geradas antes de quando o atributo não é aplicado.

Construtores

SuppressGCTransitionAttribute()

Construtor da instância.

Propriedades

TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute.

(Herdado de Attribute)

Métodos

Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Retorna o código hash para a instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando substituído em uma classe derivada, indica se o valor dessa instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando substituído em uma classe derivada, retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a