2015-05-17 44 views
2

我有幾百個MyClass存在於託管堆中的實例。其中一些是大對象堆。下面是各種堆結構的外觀獲取LOH中的對象實例列表

0:000> !EEHeap -gc 
Number of GC Heaps: 1 
generation 0 starts at 0x0000000002df9de8 
generation 1 starts at 0x0000000002dc6710 
generation 2 starts at 0x0000000002a01000 
ephemeral segment allocation context: none 
segment  begin allocated size 
0000000002a00000 0000000002a01000 0000000002e3c2c0 0x43b2c0(4436672) 
Large object heap starts at 0x0000000012a01000 
segment  begin allocated size 
0000000012a00000 0000000012a01000 000000001a5ed558 0x7bec558(129942872) 
000000002a980000 000000002a981000 00000000328110b8 0x7e900b8(132710584) 
0000000033e00000 0000000033e01000 000000003bd80d78 0x7f7fd78(133692792) 
000000001daf0000 000000001daf1000 0000000025996188 0x7ea5188(132796808) 
00000000542b0000 00000000542b1000 000000005a4bf100 0x620e100(102818048) 
000000005c2b0000 000000005c2b1000 000000006344df88 0x719cf88(119132040) 
000000007fff0000 000000007fff1000 00000000878bfbc0 0x78cebc0(126675904) 
Total Size:    Size: 0x34956418 (882205720) bytes. 
------------------------------ 
GC Heap Size:   Size: 0x34956418 (882205720) bytes. 

我的問題是
1.我如何才能找到的MyClass的是在大對象堆中的所有實例的地址。
2.有無論如何運行!ObjSize在MyClass這些實例在大對象堆?

+0

使用Google查詢「sos dump loh」這樣的問題。第一個命中將向您展示如何使用'!DumpHeap'。 –

+0

@HansPassant謝謝我剛剛找到這個鏈接http://blogs.msdn.com/b/tess/archive/2005/11/25/496973.aspx,它回答了我的問題#1。也會嘗試你的建議 –

回答

3

要獲取LOH上的所有對象,可以使用SOS !dumpheap-min選項。

!dumpheap -min 85001 

限制輸出到你要找的對象的類型,首先做一個

!dumpheap -type <MyClass> 

Address  MT  Size 
03653250 785037b8 10485776 
... 

由於!dumpheap將尋找在子決定你的對象的方法表(MT)類,這需要真正減少輸出到你的類的類型。然後使用-mt爲您找到了方法表:

!dumpheap -min 85001 -mt <MethodTable> 

爲了減少輸出到地址只,加上-short參數,讓您得到

!dumpheap -min 85001 -mt <MethodTable> -short 

然後,您可以使用地址在foreach環

.foreach (address {!dumpheap -min 85001 -mt <MethodTable> -short}) {!do ${address}} 

由於輸出可他大許多對象的情況下,考慮一切記錄到一個文件

.logopen c:\debug\logs\largeobjects.txt 
+0

只是想指出大對象堆可能包含小於85,000字節的對象。具體來說,雙排陣列從8K左右開始,即IIRC。 –

+0

@SashaGoldshtein:我也讀過,但根據我自己的實驗,這不是真的,至少不是真的了。請參閱http://stackoverflow.com/questions/30361184/loh-fragmentation-2015-update –