.net CLR类中的内存泄漏
我有一个内存泄漏,并跟踪到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 在应用程序执行期间,此字典将无限期地增长 有什么想法吗?这个领域到底是用来做什么的?它为什么能成长.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
UPD没有动态创建类型,至少在我的代码中是这样的这是迄今为止我找到的最好答案:
该问题发生在Excel VSTO Range.Style属性(它使用动态数据类型)附近。
每次这段代码
range.Style == null
运行时,会使活页夹消耗更多内存。但是如果我像这样重写代码
(Style)range.Style == null
然后问题就消失了
UPD向Microsoft报告了这一情况是否动态创建类型?并非所有形式的内存消耗都是泄漏。你的“漏洞”有多大,你如何衡量?这个漏洞是无限的。应用程序运行越多,这个表就越大,直到应用程序吃掉所有千兆字节的内存。您需要提供有关您自己的代码的更多信息—代码如何调用绑定器?在哪一点上?这被深埋在管道中,使dynamic关键字工作。不一定在您自己的代码中。如果没有显示此问题的项目,就不可能进行诊断。即使很难找到诊断,这个代码也是超级秘密。最好的办法是与微软展开一个支持案例。他们需要你的项目,这样他们才能重新解决问题。确保它易于运行,越小越好。