Compartilhar via


gcManagedToUnmanaged MDA

O gcManagedToUnmanaged Assistente de depuração gerenciada (MDA) faz com que uma coleta de lixo, sempre que um transições do segmento 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 com. O objeto COM parece ter sido lançado. A violação de acesso é determinística.

Causa

Se um componente não gerenciado não estiver corretamente um objeto COM gerenciado de contagem de referência, o runtime pode coletar um objeto gerenciado exposto a COM quando o componente não gerenciado ainda mantém uma referência ao objeto. As chamadas de tempo de execução Release durante as coletas de lixo, assim, se o componente de usuário usa o objeto antes da coleta de lixo, em seguida, ele será não ainda foram coletado. Esta é a origem do que o nondeterminism.

Resolução

Este Assistente de ativação reduz o tempo entre quando o objeto é qualificado para coleta e Release é chamado, ajudando a rastrear qual componente não gerenciado primeiro tenta acessar o objeto coletados.

Efeito sobre o tempo de execução.

Faz uma coleta de lixo, sempre que um transições do segmento 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

Referência

MarshalAsAttribute

gcUnmanagedToManaged MDA

Conceitos

Diagnosticar erros com assistentes de depuração gerenciada

Interop Marshaling

Outros recursos

Interoperabilidade