Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Note
Este artigo é específico para .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.
O gcManagedToUnmanaged MDA (assistente de depuração gerenciada) causa uma coleta de lixo sempre que um thread faz a transição de código gerenciado para não gerenciado.
Symptoms
Um componente de usuário não gerenciado lança uma violação de acesso ao tentar usar um objeto gerenciado que havia sido exposto ao COM. O objeto COM parece ter sido liberado. A violação de acesso não é determinística.
Cause
Se um componente não gerenciado não estiver contando um objeto COM gerenciado corretamente, o runtime poderá coletar um objeto gerenciado exposto ao COM quando o componente não gerenciado ainda tiver uma referência ao objeto. As chamadas Release de runtime durante 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. Essa é a fonte do não determinismo.
Resolução
Habilitar esse assistente reduz o tempo entre quando o objeto é qualificado para coleção e Release é chamado, ajudando a rastrear qual componente não gerenciado primeiro tenta acessar o objeto coletado.
Efeito no Runtime
Causa uma coleta de lixo sempre que um thread faz a transição de código gerenciado para não gerenciado.
Saída
Esse MDA não produz nenhuma saída.
Configuração
<mdaConfig>
<assistants>
<gcManagedToUnmanaged/>
</assistants>
</mdaConfig>