gcManagedToUnmanaged MDA

注释

本文特定于 .NET Framework。 它不适用于 .NET 的较新版本实现,包括 .NET 6 及更高版本。

gcManagedToUnmanaged每当线程从托管代码转换到非托管代码时,托管调试助手(MDA)都会引发垃圾回收。

症状

尝试使用已向 COM 公开的托管对象时,非托管用户组件会引发访问冲突。 COM 对象似乎已发布。 访问冲突是不确定的。

原因

如果非托管组件未正确对托管 COM 对象进行引用计数,则当非托管组件仍保留对对象的引用时,运行时可能会收集向 COM 公开的托管对象。 垃圾回收期间的运行时调用 Release ,因此,如果用户组件在垃圾回收发生前使用该对象,则尚未收集该对象。 这是不确定性的根源。

解决方案

启用此助手可以减少对象符合收集条件并 Release 被调用之间的时间,帮助跟踪哪些非托管组件首先尝试访问收集的对象。

对运行时的影响

每当线程从托管代码转换到非托管代码时,都会引发垃圾回收。

输出

此 MDA 不生成任何输出。

配置

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

另见