gcManagedToUnmanaged MDA
每当线程从托管代码转换到非托管代码时,gcManagedToUnmanaged
托管调试助手 (MDA) 都会引起垃圾回收。
症状
当尝试使用已向 COM 公开的托管的对象时,非托管的用户组件会引发访问冲突。 COM 对象显示为已发布。 访问冲突具有不确定性。
原因
如果非托管组件未对托管的 COM 对象执行正确的引用计数,则当非托管组件仍拥有对象的引用时,运行时可能收集已向 COM 公开的托管对象。 运行时在垃圾回收期间调用 Release,因此如果用户组件在垃圾回收发生前使用对象,则不回收此对象。 这就造成了不确定性。
解决方法
启用此助手可缩短对象符合回收条件时和调用 Release 时的时间间隔,从而有助于跟踪首先尝试访问回收对象的非托管组件。
对运行时的影响
每当线程从托管代码转换到非托管代码时,都会引起垃圾回收。
输出
此 MDA 不会产生任何输出。
Configuration
<mdaConfig>
<assistants>
<gcManagedToUnmanaged/>
</assistants>
</mdaConfig>
请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈