Моя проблема в том, что dumpheap -stat
возвращает очень много объектов, и я понятия не имею, какие из них укоренены, а какие нет.
Ну, я могу, если я запускаю команду !mroot
или !refs
для отдельного адреса, но этот подход не очень хорошо масштабируется для тысяч объектов, о которых сообщает dumpheap
.
Например, dumpheap -stat
содержит следующую строку:
000007fef3d14088 74247 2375904 Microsoft.Internal.ReadLock
Вау, 74 247 экземпляров. Тем не менее, бег
.logopen c:\tmp\2\log.txt;.foreach (entry {!dumpheap -type Microsoft.Internal.ReadLock -short}){!refs ${entry} -target};.logclose
показывает, что каждый случай, о котором сообщает DumpHeap
, на самом деле является неутилизированным мусором!
Как я обнаружил, что каждый экземпляр является мусором, это еще одна проблема. Мне пришлось извлечь все NONE
строк в один файл и все Objects referencing
строк в другой, а затем сравнить количество строк в каждом файле. Наверняка есть лучший способ :-(.
В любом случае, я хотел бы знать, как сосредоточиться только на корневых объектах. В идеале я хотел бы получить статистику, а также подробную информацию о таких объектах.