Mar*_*ski 5 c# memory-leaks dynamic comobject
有谁知道在 C# 中对 __ComObject 实例使用“dynamic”关键字时是否有办法防止 RuntimeBinder 中的内存泄漏?
我得到以下代码:
var t = Type.GetTypeFromCLSID(new Guid("BB06C0E4-D293-4f75-8A90-CB05B6477EEE"));
while (true)
{
dynamic o = System.Activator.CreateInstance(t);
Marshal.ReleaseComObject(o);
}
Run Code Online (Sandbox Code Playgroud)
这会泄漏 LocalVariableSymbol 类实例(以及来自 Microsoft.CSharp.RuntimeBinder.Semantics 命名空间的其他实例)。
将“动态”替换为“对象”,即:
object o = System.Activator.CreateInstance(t);
Run Code Online (Sandbox Code Playgroud)
修复了泄漏,但我更愿意继续使用动态(实际代码要复杂得多并且使用“动态”)。
我知道 RuntimeBinder 单例会缓存数据,这会导致泄漏,但您知道是否有任何方法可以清理缓存等?
非常感谢!
类似问题:
相关链接:
我的情况的解决方案是替换:
dynamic o = System.Activator.CreateInstance(t);
Run Code Online (Sandbox Code Playgroud)
和:
object o = System.Activator.CreateInstance(t);
dynamic d = o;
Run Code Online (Sandbox Code Playgroud)
应用解决方法后,不再发生内存泄漏。
| 归档时间: |
|
| 查看次数: |
2471 次 |
| 最近记录: |