gpt4 book ai didi

c# - 将 "dynamic"关键字与 __ComObject 一起使用时 RuntimeBinder 中的泄漏

转载 作者:行者123 更新时间:2023-11-30 12:24:40 24 4
gpt4 key购买 nike

有人知道在 C# 中对 __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 类实例(以及 Microsoft.CSharp.RuntimeBinder.Semantics 命名空间中的其他实例)。

用“对象”替换“动态”即:

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

修复了泄漏,但我更愿意继续使用动态(实际代码要复杂得多并使用“动态”)。

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

非常感谢!


类似问题:

相关链接:

最佳答案

我的解决方案是替换:

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

与:

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

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

关于c# - 将 "dynamic"关键字与 __ComObject 一起使用时 RuntimeBinder 中的泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33259334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com