我有内存泄漏并将其追溯到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
Run Code Online (Sandbox Code Playgroud)
运行时,它会使绑定程序消耗更多内存。
但是如果我像这样重写这段代码
(Style)range.Style == null
Run Code Online (Sandbox Code Playgroud)
然后问题就消失了。
UPD 向 Microsoft 报告了此问题https://connect.microsoft.com/VisualStudio/feedback/details/861770/memory-leak-when-using-excel-add-in-api#tabs