Утечка памяти в классах 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
Во время исполнения заявки этот словарь неограниченно растет.
Есть идеи, для чего именно используется это поле и почему оно может расти?
UPD нет динамического создания типов, по крайней мере в моем коде
1 ответ
Лучший ответ, который я нашел до сих пор:
Проблема возникает где-то вокруг свойства 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