Assistant Débogage managé gcManagedToUnmanaged

L'Assistant Débogage managé (MDA) gcManagedToUnmanaged déclenche une opération garbage collection chaque fois qu'un thread effectue la transition du code managé au code non managé.

Symptômes

Un composant utilisateur non managé lève une violation d'accès lors de la tentative d'utilisation d'un objet managé qui avait été exposé à COM. L’objet COM semble avoir été libéré. La violation d'accès est non déterministe.

Cause

Si un composant non managé n'effectue pas correctement le décompte de références d'un objet COM managé, le runtime peut collecter un objet managé exposé à COM lorsque le composant non managé détient encore une référence à l'objet. Le runtime appelle Release pendant les opérations garbage collection. Par conséquent, si le composant utilisateur a recours à l’objet avant l’opération garbage collection, il n’aura pas encore été collecté. Cela explique le non-déterminisme.

Résolution

L’activation de cet assistant réduit le laps de temps entre le moment où l’objet peut participer à une collection et le moment où Release est appelé, ce qui facilite la localisation du composant non managé qui tente en premier d’accéder à l’objet récupéré par le garbage collector.

Effet sur le runtime

Provoque une opération garbage collection chaque fois qu'un thread effectue la transition du code managé au code non managé.

Sortie

Cet Assistant Débogage managé ne produit aucune sortie.

Configuration

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

Voir aussi