У меня есть сеанс профилирования dotMemory, и мне не удалось обнаружить утечку памяти, поэтому я сделал следующее:
- Запустить сеанс dotMemory
- Прикрепите WinDbg и вмешайтесь в процесс
- Сделайте снимок в dotMemory
- Позвольте процессу продолжаться (
g
), чтобы dotMemory мог взять магазин моментальных снимков
- После того, как был сделан снимок, снова включите процесс
Таким образом, я должен получить идентичные результаты, если приложение находится в состоянии ожидания, то есть ничего не делает (ну, он запускает насос сообщений).
Глядя на объекты в этом снимке dotMemory, я вижу 88000 объектов типа JProperty:
Однако в WinDbg я вижу двойное количество объектов:
0:021> !dumpheap -stat -type JProperty
Statistics:
MT Count TotalSize Class Name
000007fe7d3a3c28 83930 3357200 Newtonsoft.Json.Linq.JPropertyKeyedCollection
000007fe7d3a4ef0 177104 4250496 Newtonsoft.Json.Linq.JProperty+JPropertyList
000007fe7d3a4b80 177104 18418816 Newtonsoft.Json.Linq.JProperty
Total 438138 objects
Кто не прав - или это известная проблема использования отладчика вместе с dotMemory?
Я использую dotMemory 2018.1.4 и WinDbg 10.0.15063 в Windows 7, отлаживая программу x64, если что-то из этого имеет значение.