Compartilhar via


MDA gcUnmanagedToManaged

Observação

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

O MDA (assistente para depuração gerenciada) gcUnmanagedToManaged causa uma coleta de lixo sempre que um thread faz a transição de código não gerenciado para código gerenciado.

Sintomas

Um aplicativo que executa componentes de usuário não gerenciados usando o COM e a invocação de plataforma está causando uma violação de acesso não determinístico no CLR.

Causa

Se um aplicativo estiver executando componentes de usuário não gerenciados, esses componentes poderão ter corrompido o heap coletado como lixo. Isso causa uma violação de acesso no CLR quando o coletor de lixo tenta percorrer o gráfico do objeto.

Resolução

A habilitação desse assistente reduz o tempo entre o período em que o componente não gerenciado corrompe o heap coletado como lixo e o período em que ocorre a violação de acesso, forçando uma coleta de lixo antes de cada transição gerenciada.

Efeito sobre o runtime

Causa uma coleta de lixo sempre que um thread faz a transição de código não gerenciado para código gerenciado.

Saída

Esse MDA não produz nenhuma saída.

Configuração

<mdaConfig>
  <assistants>
    <gcUnmanagedToManaged/>
  </assistants>
</mdaConfig>

Confira também