gcManagedToUnmanaged MDA

gcManagedToUnmanaged Zarządzany asystent debugowania (MDA) powoduje odzyskiwanie pamięci za każdym razem, gdy wątek przechodzi z zarządzanego do niezarządzanego kodu.

Objawy

Niezarządzany składnik użytkownika zgłasza naruszenie dostępu podczas próby użycia obiektu zarządzanego, który został uwidoczniony w modelu COM. Wydaje się, że obiekt COM został zwolniony. Naruszenie dostępu jest nieokreślone.

Przyczyna

Jeśli składnik niezarządzany nie odwołuje się do prawidłowego zliczania zarządzanego obiektu COM, środowisko uruchomieniowe może zebrać obiekt zarządzany uwidoczniony dla modelu COM, gdy składnik niezarządzany nadal przechowuje odwołanie do obiektu. Środowisko uruchomieniowe wywołuje wywołania Release podczas odzyskiwania pamięci, więc jeśli składnik użytkownika używa obiektu przed rozpoczęciem odzyskiwania pamięci, nie zostanie jeszcze zebrany. Jest to źródło nieokreśloności.

Rozwiązanie

Włączenie tego asystenta skraca czas między tym, kiedy obiekt kwalifikuje się do kolekcji i Release jest wywoływany, co pomaga w śledzeniu, który składnik niezarządzany najpierw próbuje uzyskać dostęp do zebranego obiektu.

Wpływ na środowisko uruchomieniowe

Powoduje odzyskiwanie pamięci za każdym razem, gdy wątek przechodzi z zarządzanego do niezarządzanego kodu.

Dane wyjściowe

To rozwiązanie MDA nie generuje żadnych danych wyjściowych.

Konfiguracja

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

Zobacz też