Утечка памяти в классах CLR - PullRequest
5 голосов
/ 06 января 2012

Я обнаружил утечку памяти и отследил ее до этого поля внутри 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 Ответ

4 голосов
/ 16 мая 2012

Лучший ответ, который я нашел на данный момент:
Проблема возникает где-то вокруг свойства Excel VSTO Range.Style (использует динамический тип данных).
Каждый раз, когда этот фрагмент кода

range.Style == null

выполняется, это заставляет связыватель потреблять больше памяти.
Но если я переписываю этот код следующим образом

(Style)range.Style == null

, тогда проблема исчезает.

UPD сообщил об этом в Microsofthttps://connect.microsoft.com/VisualStudio/feedback/details/861770/memory-leak-when-using-excel-add-in-api#tabs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...