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


gcManagedToUnmanaged MDA

Примечание.

Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.

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

Симптомы

Неуправляемый пользовательский компонент вызывает нарушение прав доступа при попытке использования управляемого объекта, предоставленного для COM. COM-объект выглядит как освобожденный. Нарушение прав доступа является недетерминированным.

Причина

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

Разрешение

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

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

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

Выходные данные

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

Настройка

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

См. также