Partilhar via


gcManagedToUnmanaged MDA

The gcManagedToUnmanaged Assistente de depuração gerenciada (MDA) faz com que uma coleta de lixo sempre que um thread transita de gerenciado para código não gerenciado.

Sintomas

Um componente de usuário não gerenciado lança uma violação de acesso ao tentar usar um objeto gerenciado que tinha sido exposto para COM.O objeto COM parece ter sido lançado.A violação de acesso é não determinísticas.

Causa

Se um componente não gerenciado não é referência contando um objeto COM gerenciado corretamente, o tempo de execução pode coletar um objeto gerenciado exposto a COM quando o componente não gerenciado ainda mantém uma referência ao objeto.O tempo de execução chama Release durante o lixo coleção s, portanto, se o componente de usuário usa o objeto antes do lixo coleção ocorre, e, em seguida, ele irá não ainda foram coletado. Essa é fonte do nondeterminism.

Resolução

Habilitar este assistente reduz o time entre quando o objeto é qualificado para coleção e Release é chamado, ajudando a rastrear o componente que não gerenciado primeiro tenta acessar o objeto coletado.

Efeito sobre o tempo de execução

Faz com que uma coleta de lixo sempre que um segmento de transições de gerenciado para código não gerenciado.

Saída

Este MDA não produz nenhuma saída.

Configuração

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

Consulte também

Conceitos

Diagnosticar erros com assistentes de depuração gerenciadas

Visão geral do empacotamento interop

Referência

MarshalAsAttribute

gcUnmanagedToManaged MDA

Outros recursos

Interoperabilidade