gcManagedToUnmanaged MDA
Notitie
Dit artikel is specifiek voor .NET Framework. Dit geldt niet voor nieuwere implementaties van .NET, waaronder .NET 6 en nieuwere versies.
De gcManagedToUnmanaged
beheerde foutopsporingsassistent (MDA) zorgt voor een garbagecollection wanneer een thread overgaat van beheerde naar niet-beheerde code.
Symptomen
Een onbeheerd gebruikersonderdeel genereert een toegangsfout bij het gebruik van een beheerd object dat is blootgesteld aan COM. Het COM-object lijkt te zijn vrijgegeven. De toegangsschending is niet-deterministisch.
Oorzaak
Als een niet-beheerd onderdeel niet correct verwijst naar het tellen van een beheerd COM-object, kan de runtime een beheerd object verzamelen dat wordt blootgesteld aan COM wanneer het niet-beheerde onderdeel nog steeds een verwijzing naar het object bevat. De runtimeaanroepen Release tijdens garbagecollections, dus als het gebruikersonderdeel het object gebruikt voordat de garbagecollection plaatsvindt, is het nog niet verzameld. Dit is de bron van het niet-determinisme.
Oplossing
Als u deze assistent inschakelt, wordt de tijd verkort tussen het moment waarop het object in aanmerking komt voor verzameling en Release wordt aangeroepen, zodat u kunt achterhalen welk niet-beheerde onderdeel eerst toegang probeert te krijgen tot het verzamelde object.
Effect op de runtime
Hiermee wordt een garbagecollection veroorzaakt wanneer een thread overgaat van beheerde naar onbeheerde code.
Uitvoer
Deze MDA produceert geen uitvoer.
Configuratie
<mdaConfig>
<assistants>
<gcManagedToUnmanaged/>
</assistants>
</mdaConfig>