gcUnmanagedToManaged MDA

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

症状

使用 COM 和平台调用来运行非托管用户组件的应用程序在 CLR 中导致了一个非确定性的访问冲突。

原因

如果一个应用程序运行非托管用户组件,则这些组件可能损坏了已垃圾回收的堆。 在垃圾回收器尝试审核对象图时,这会在 CLR 中导致访问冲突。

解决方法

通过在所有托管转换之前强制垃圾回收来启用此助手,可以减少从非托管组件损坏已垃圾回收的堆到发生访问冲突之间的时间。

对运行时的影响

导致每当发生从非托管代码到托管代码的线程转换时都进行垃圾回收。

Output

此 MDA 不生成任何输出。

配置

<mdaConfig>
  <assistants>
    <gcUnmanagedToManaged/>
  </assistants>
</mdaConfig>

请参见

参考

gcManagedToUnmanaged MDA

MarshalAsAttribute

概念

使用托管调试助手诊断错误

互操作封送处理

其他资源

互操作性