gcGeridoMDA Não Gerido

Note

Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.

O gcManagedToUnmanaged assistente de depuração gerido (MDA) provoca uma recolha de lixo sempre que um thread transita de código gerido para código não gerido.

Sintomas

Um componente de utilizador não gerido lança uma violação de acesso ao tentar usar um objeto gerido que foi exposto ao COM. O objeto COM parece ter sido libertado. A violação de acesso é não determinística.

Motivo

Se um componente não gerido não estiver a contar corretamente um objeto COM gerido, então o runtime pode recolher um objeto gerido exposto ao COM quando o componente não gerido ainda mantém referência ao objeto. As chamadas Release de tempo de execução durante as recolhas de lixo, por isso, se o componente utilizador usar o objeto antes da recolha de lixo ocorrer, este ainda não terá sido recolhido. Esta é a origem do não-determinismo.

Resolução

Ativar este assistente reduz o tempo entre o momento em que o objeto é elegível para recolha e Release é chamado, ajudando a identificar qual componente não gerido tenta primeiro aceder ao objeto recolhido.

Efeito no tempo de execução

Causa uma recolha de lixo sempre que um thread transita de código gerido para não gerido.

Output

Este MDA não produz saída.

Configuração

<mdaConfig>
  <assistants>
    <gcManagedToUnmanaged/>
  </assistants>
</mdaConfig>

Ver também