Как использовать !gcroot

Из непосредственного окна визуальной студии с загруженным расширением отладки 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 для некоторых байтовых массивов?


person bitbonk    schedule 22.09.2009    source источник


Ответы (1)


Вы можете отфильтровать шум с помощью переключателей -min -max. Я предполагаю, что ваша проблема связана с большими объектами, поэтому вызовите !dumpheap -min -type System.Byte[] где достаточно большой, чтобы отфильтровать шум.

person Shay Erlichmen    schedule 22.09.2009