Delen via


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>

Zie ook