gcManagedToUnmanaged MDA

Note

Dieser Artikel ist spezifisch für .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.

Der gcManagedToUnmanaged verwaltete Debugging-Assistent (Managed Debugging Assistant, MDA) bewirkt eine Garbage Collection, wenn ein Thread von verwaltetem zu nicht verwaltetem Code wechselt.

Symptome

Eine nicht verwaltete Benutzerkomponente löst eine Zugriffsverletzung aus, wenn versucht wird, ein verwaltetes Objekt zu verwenden, das für COM verfügbar gemacht wurde. Das COM-Objekt scheint freigegeben worden zu sein. Die Zugriffsverletzung ist nicht unbestimmt.

Ursache

Wenn eine nicht verwaltete Komponente nicht auf das Zählen eines verwalteten COM-Objekts verweist, kann die Laufzeit ein verwaltetes Objekt sammeln, das COM verfügbar gemacht wird, wenn die nicht verwaltete Komponente weiterhin einen Verweis auf das Objekt enthält. Die Laufzeitaufrufe Release während der Garbage Collections. Wenn also die Benutzerkomponente das Objekt verwendet, bevor die Garbage Collection eintritt, wurde sie noch nicht erfasst. Dies ist die Quelle des Nichtdeterminismus.

Auflösung

Durch aktivieren dieses Assistenten wird die Zeit zwischen dem Zeitpunkt reduziert, in dem das Objekt für die Sammlung berechtigt ist und Release aufgerufen wird, um nachzuverfolgen, welche nicht verwaltete Komponente zuerst versucht, auf das gesammelte Objekt zuzugreifen.

Effekt auf die Laufzeit

Verursacht eine Garbage Collection, wenn ein Thread von verwaltetem zu nicht verwaltetem Code wechselt.

Output

Diese MDA erzeugt keine Ausgabe.

Konfiguration

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

Siehe auch