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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla