Dela via


gcManagedToUnmanaged MDA

Kommentar

Den här artikeln är specifik för .NET Framework. Det gäller inte för nyare implementeringar av .NET, inklusive .NET 6 och senare versioner.

Den gcManagedToUnmanaged hanterade felsökningsassistenten (MDA) orsakar en skräpinsamling när en tråd övergår från hanterad till ohanterad kod.

Symtom

En ohanterad användarkomponent utlöser en åtkomstöverträdelse när ett hanterat objekt som har exponerats för COM används. COM-objektet verkar ha släppts. Åtkomstöverträdelsen är icke-terministisk.

Orsak

Om en ohanterad komponent inte refererar till att räkna ett hanterat COM-objekt korrekt kan körningen samla in ett hanterat objekt som exponeras för COM när den ohanterade komponenten fortfarande innehåller en referens till objektet. Körningen anropar Release under skräpsamlingar, så om användarkomponenten använder objektet innan skräpinsamlingen inträffar har den ännu inte samlats in. Detta är källan till nondeterminismen.

Åtgärd

Om du aktiverar den här assistenten minskar tiden mellan när objektet är berättigat till samling och Release anropas, vilket hjälper till att spåra vilken ohanterad komponent som först försöker komma åt det insamlade objektet.

Effekt på körningen

Orsakar en skräpinsamling när en tråd övergår från hanterad till ohanterad kod.

Output

Den här MDA:n genererar inga utdata.

Konfiguration

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

Se även