Как использовать !gcroot
Вопрос
Из окна Visual Studio с загруженным расширением отладки SOS я могу сделать
!dumpheap -stat
Тогда я получаю что-то вроде этого:
total 108,014 objects
Statistics:
MT Count TotalSize Class Name
...
0x00be209c 135 714108 System.Object[]
0x79b925c8 218 2659728 System.String
0x00be2c3c 78986 10,705,064 System.Byte[]
Total 208,014 objects, Total size: 36,259,364
Как мне теперь вызвать !gcroot в некоторых экземплярах System.Byte[]?Сначала мне нужно было найти их адрес.Но использование !dumpheap -type System.Byte[], безусловно, плохая идея, потому что это даст мне бесконечный список, а поскольку непосредственное окно кажется медленным, их перечисление занимает более 20 минут - в это время Visual Studio не годный к употреблению.Есть ли секретный трюк, как я мог бы вызвать !gcroot для некоторых байтовых массивов?
Решение
Вы можете отфильтровать шум с помощью переключателей -min -max. Я предполагаю, что ваша проблема связана с большими объектами, поэтому вызывайте !dumpheap -min -type System.Byte[], где достаточно большой размер, чтобы отфильтровать шум.