我遇到了内存泄漏,并追踪到 CLR 中的这个字段:
Microsoft.CSharp.RuntimeBinder.RuntimeBinder.s_instance.m_semanticChecker.globalSymbolContext.GlobalSymbols.tableGlobal.dictionary
可以使用以下规范在调试器中查看它:
((Microsoft.CSharp.RuntimeBinder.Semantics.LangCompiler)(Microsoft.CSharp.RuntimeBinder.RuntimeBinder.s_instance.m_semanticChecker)).globalSymbolContext.GlobalSymbols.tableGlobal.dictionary
在应用程序执行期间,该字典会无限增长。
有什么想法吗,这个领域到底是用来做什么的,为什么它可以增长?
UPD 没有动态创建类型,至少在我的代码中
到目前为止我找到的最佳答案:
问题发生在 Excel VSTO Range.Style 属性周围的某个地方(它使用动态数据类型)。
每次这段代码
range.Style == null
运行时,它会使绑定程序消耗更多内存。
但是如果我像这样重写这段代码
(Style)range.Style == null
然后问题就消失了。
UPD 向 Microsoft 报告了这一情况https://connect.microsoft.com/VisualStudio/feedback/details/861770/memory-leak-when-using-excel-add-in-api#tabs https://connect.microsoft.com/VisualStudio/feedback/details/861770/memory-leak-when-using-excel-add-in-api#tabs
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)