Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Note
Questo articolo è specifico per .NET Framework. Non si applica alle implementazioni più recenti di .NET, tra cui .NET 6 e versioni successive.
L'assistente gcManagedToUnmanaged al debug gestito causa un'operazione di Garbage Collection ogni volta che un thread passa da codice gestito a codice non gestito.
Symptoms
Un componente utente non gestito genera una violazione di accesso quando si tenta di usare un oggetto gestito esposto a COM. L'oggetto COM sembra essere stato rilasciato. La violazione di accesso non è deterministica.
Cause
Se un componente non gestito non fa riferimento al conteggio corretto di un oggetto COM gestito, il runtime potrebbe raccogliere un oggetto gestito esposto a COM quando il componente non gestito contiene ancora un riferimento all'oggetto . Il runtime chiama Release durante le operazioni di Garbage Collection, quindi se il componente utente usa l'oggetto prima che si verifichi l'operazione di Garbage Collection, non sarà ancora stato raccolto. Questa è la fonte del non determinismo.
Risoluzione
L'abilitazione di questo assistente riduce il tempo tra il momento in cui l'oggetto è idoneo per la raccolta e Release viene chiamato, consentendo di tenere traccia del componente non gestito che tenta prima di accedere all'oggetto raccolto.
Effetto sul runtime
Genera un'operazione di Garbage Collection ogni volta che un thread passa da codice gestito a codice non gestito.
Risultato
Questo assistente al debug gestito non produce alcun output.
Configuration
<mdaConfig>
<assistants>
<gcManagedToUnmanaged/>
</assistants>
</mdaConfig>