Поделиться через


gcManagedToUnmanaged MDA

Обновлен: Ноябрь 2007

Управляемый помощник по отладке (MDA) gcManagedToUnmanaged инициирует процесс сборки мусора каждый раз, когда происходит передача потока из управляемого в неуправляемый код.

Признаки

В неуправляемом пользовательском компоненте происходит нарушение прав доступа при попытке использования управляемого объекта, предоставленного СОМ. Объект СОМ высвобождается. Нарушение прав доступа является недетерминированным.

Причина

Если неуправляемый компонент не подсчитывает ссылки на управляемый объект СОМ должным образом, среда выполнения может собрать управляемый объект, предоставленный СОМ, в то время как неуправляемый компонент еще содержит ссылку на объект. Среда выполнения вызывает Release в процессе сборки мусора, поэтому если пользовательский компонент использует объект перед сборкой мусора, значит, он пока не будет собран. Именно в этом заключается источник недетерминированности.

Решение

Включение помощника уменьшает интервал времени с момента, когда объект подлежит сборке, до момента вызова Release, что помешает отслеживать, какой из неуправляемых компонентов первым попытается получить доступ к объекту, подлежащему сборке.

Влияние на среду выполнения

Инициирует процесс сборки мусора каждый раз, когда выполняется потоковая передача из управляемого в неуправляемый код.

Результат

Данный MDA не дает результатов.

Конфигурация

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

См. также

Основные понятия

Диагностика ошибок посредством управляемых помощников по отладке

Общие сведения о маршалинге взаимодействия

Ссылки

MarshalAsAttribute

gcUnmanagedToManaged MDA

Другие ресурсы

Взаимодействие