gcManagedToUnmanaged MDA

Uwaga / Notatka

Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji .NET, w tym .NET 6 i nowszych wersji.

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

Symptoms

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 niezarządzany składnik nie odlicza poprawnie zarządzanego obiektu COM, środowisko uruchomieniowe może zebrać zarządzany obiekt uwidoczniony w modelu COM, gdy niezarządzany składnik 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.

Rozdzielczość

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 niezarządzany składnik 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.

Wynik

Ta usługa MDA nie generuje żadnych danych wyjściowych.

Konfiguracja

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

Zobacz także