Condividi tramite


MDA gcManagedToUnmanaged

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 durante il tentativo di utilizzo di un oggetto gestito esposto a COM. Si ha l'impressione che l'oggetto COM sia stato rilasciato. 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 utilizza 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 sul runtime

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.

Configurazione

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

Vedere anche

Riferimenti

MarshalAsAttribute

MDA gcUnmanagedToManaged

Concetti

Diagnostica degli errori tramite gli assistenti al debug gestito

Marshalling di interoperabilità

Altre risorse

Interoperabilità