.net CLR类中的内存泄漏

.net CLR类中的内存泄漏,.net,clr,.net,Clr,我有一个内存泄漏,并跟踪到CLR中的这个字段: Microsoft.CSharp.RuntimeBinder.RuntimeBinder.s_instance.m_semanticChecker.globalSymbolContext.GlobalSymbols.tableGlobal.dictionary 可以使用以下规范在调试器中查看: ((Microsoft.CSharp.RuntimeBinder.Semantics.LangCompiler)(Microsoft.CSharp.Runt

我有一个内存泄漏,并跟踪到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报告了这一情况

是否动态创建类型?并非所有形式的内存消耗都是泄漏。你的“漏洞”有多大,你如何衡量?这个漏洞是无限的。应用程序运行越多,这个表就越大,直到应用程序吃掉所有千兆字节的内存。您需要提供有关您自己的代码的更多信息—代码如何调用绑定器?在哪一点上?这被深埋在管道中,使dynamic关键字工作。不一定在您自己的代码中。如果没有显示此问题的项目,就不可能进行诊断。即使很难找到诊断,这个代码也是超级秘密。最好的办法是与微软展开一个支持案例。他们需要你的项目,这样他们才能重新解决问题。确保它易于运行,越小越好。