MDA gcManagedToUnmanaged
Aggiornamento: novembre 2007
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
Concetti
Diagnostica degli errori tramite gli assistenti al debug gestito
Cenni preliminari sul marshalling di interoperabilità