Condividi tramite


MDA gcManagedToUnmanaged

Nota

Questo articolo è specifico per .NET Framework. Non si applica alle implementazioni più recenti di .NET, incluse .NET 6 e versioni successive.

L'assistente al debug gestito gcManagedToUnmanaged determina un'operazione di Garbage Collection ogni volta che un thread passa dal codice gestito al codice non gestito.

Sintomi

Un componente utente non gestito genera una violazione di accesso quando si cerca di usare un oggetto gestito esposto a COM. L'oggetto COM appare come rilasciato e la violazione di accesso è non deterministica.

Causa

Se un componente non gestito non esegue correttamente il conteggio dei riferimenti a un oggetto COM gestito, il runtime potrebbe eseguire una Garbage Collection di un oggetto gestito esposto a COM mentre il componente gestito contiene ancora un riferimento all'oggetto. Il runtime chiama il metodo Release durante le Garbage Collection. In questo modo, se il componente utente usa l'oggetto prima che si verifichi la Garbage Collection, non sarà ancora stato sottoposto all'operazione. Da ciò deriva il non determinismo.

Risoluzione

L'attivazione di questo assistente consente di ridurre il periodo compreso tra il momento in cui l'oggetto è disponibile per la Garbage Collection e la chiamata di Release rendendo possibile tenere traccia del componente non gestito che tenta per primo di accedere all'oggetto sottoposto a Garbage Collection.

Effetto sull'ambiente di esecuzione

Viene causata una Garbage Collection ogni volta che un thread passa dal codice gestito al codice non gestito.

Output

Questo assistente al debug gestito non produce output.

Impostazione

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

Vedi anche