gcManagedToUnmanaged MDA
Управляемый помощник по отладке (MDA) gcManagedToUnmanaged инициирует процесс сборки мусора каждый раз, когда происходит передача потока из управляемого в неуправляемый код.
Признаки
В неуправляемом пользовательском компоненте происходит нарушение прав доступа при попытке использования управляемого объекта, предоставленного СОМ. Объект СОМ высвобождается. Нарушение прав доступа является недетерминированным.
Причина
Если неуправляемый компонент не подсчитывает ссылки на управляемый объект СОМ должным образом, среда выполнения может собрать управляемый объект, предоставленный СОМ, в то время как неуправляемый компонент еще содержит ссылку на объект. Среда выполнения вызывает Release в процессе сборки мусора, поэтому если пользовательский компонент использует объект перед сборкой мусора, значит, он пока не будет собран. Именно в этом заключается источник недетерминированности.
Решение
Включение помощника уменьшает интервал времени с момента, когда объект подлежит сборке, до момента вызова Release, что помешает отслеживать, какой из неуправляемых компонентов первым попытается получить доступ к объекту, подлежащему сборке.
Влияние на среду выполнения
Инициирует процесс сборки мусора каждый раз, когда выполняется потоковая передача из управляемого в неуправляемый код.
Output
Данный MDA не дает результатов.
Конфигурация
<mdaConfig>
<assistants>
<gcManagedToUnmanaged/>
</assistants>
</mdaConfig>
См. также
Ссылки
Основные понятия
Диагностика ошибок посредством управляемых помощников по отладке