gcManagedToUnmanaged MDA

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

症状

当尝试使用已向 COM 公开的托管的对象时,非托管的用户组件会引发访问冲突。 COM 对象显示为已发布。 访问冲突具有不确定性。

原因

如果非托管组件未对托管的 COM 对象执行正确的引用计数,则当非托管组件仍拥有对象的引用时,运行时可能收集已向 COM 公开的托管对象。 运行时在垃圾回收期间调用 Release,因此如果用户组件在垃圾回收发生前使用对象,则不回收此对象。 这就造成了不确定性。

解决方法

启用此助手可缩短对象符合回收条件时和调用 Release 时的时间间隔,从而有助于跟踪首先尝试访问回收对象的非托管组件。

对运行时的影响

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

输出

此 MDA 不会产生任何输出。

Configuration

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

请参阅