将 "dynamic" 关键字与 __ComObject 一起使用时 RuntimeBinder 泄漏

Leak in RuntimeBinder when using "dynamic" keyword with __ComObject

有人知道在 C# 中将 "dynamic" 关键字与 __ComObject 个实例一起使用时是否有办法防止 RuntimeBinder 内存泄漏吗?

我得到以下代码:

var t = Type.GetTypeFromCLSID(new Guid("BB06C0E4-D293-4f75-8A90-CB05B6477EEE"));
while (true)
{
    dynamic o = System.Activator.CreateInstance(t);
    Marshal.ReleaseComObject(o);
}

这会泄漏 LocalVariableSymbol class 个实例(以及 Microsoft.CSharp.RuntimeBinder.Semantics 命名空间中的其他实例)。

将 "dynamic" 替换为 "object" 即:

    object o = System.Activator.CreateInstance(t);

修复了漏洞,但我更愿意继续使用 dynamic(实际代码要复杂得多并使用 "dynamic")。

我知道 RuntimeBinder 单例缓存数据,这会导致泄漏,但您知道是否有任何方法可以清理缓存等?

非常感谢!


类似问题:

相关链接:

我的解决方案是替换:

dynamic o = System.Activator.CreateInstance(t);

与:

object o = System.Activator.CreateInstance(t);
dynamic d = o;

应用解决方法后不再发生内存泄漏。

我遇到了类似的问题:使用 "dynamic" 导致内存泄漏。

我通过以下方式解决了这个问题:

using (dynamic attr = curve.Attributes)
{
  if (attr != null)
    return attr.InternalLabel;
}