gcUnmanagedToManaged MDA

注意

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

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

症状

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

原因

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

解决方法

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

对运行时的影响

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

输出

此 MDA 不会产生任何输出。

Configuration

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

请参阅