gcManagedToUnmanaged MDA
Nota
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 gerenciado (MDA) causa uma coleta de lixo sempre que um thread transita de código gerenciado para não gerenciado.
Sintomas
Um componente de usuário não gerenciado gera uma violação de acesso ao tentar usar um objeto gerenciado que foi exposto ao COM. O objeto COM parece ter sido liberado. A violação de acesso não é determinística.
Motivo
Se um componente não gerenciado não for referência contando um objeto COM gerenciado corretamente, o tempo de execução poderá coletar um objeto gerenciado exposto a COM quando o componente não gerenciado ainda mantiver uma referência ao objeto. O tempo de execução chama Release durante as coletas de lixo, portanto, se o componente do usuário usar o objeto antes da coleta de lixo ocorrer, ele ainda não terá sido coletado. Esta é a fonte do não-determinismo.
Resolução
Habilitar esse assistente reduz o tempo entre quando o objeto é qualificado para coleta e Release é chamado, ajudando a rastrear qual componente não gerenciado tenta acessar o objeto coletado pela primeira vez.
Efeito no tempo de execução
Causa uma coleta de lixo sempre que um thread faz a transição de código gerenciado para não gerenciado.
Saída
Este MDA não produz nenhuma saída.
Configuração
<mdaConfig>
<assistants>
<gcManagedToUnmanaged/>
</assistants>
</mdaConfig>