Ist mein Haufen fragmentiert
-
22-08-2019 - |
Frage
0:000> !dumpheap -stat
total 1755874 objects
Statistics:
MT Count TotalSize Class Name
7b9b0c64 1 12 System.Windows.Forms.Layout.TableLayout+ColumnSpanComparer
....
7933303c 14006 4926456 System.Collections.Hashtable+bucket[]
65246e00 804 4982192 System.Data.RBTree`1+Node[[System.Int32, mscorlib]][]
054c55f0 44240 5662720 DevExpress.Utils.AppearanceObject
793040bc 98823 7613156 System.Object[]
793308ec 293700 55820016 System.String
002435f0 50315 138631888 Free
Total 1755874 objects
Fragmented blocks larger than 0.5 MB:
Addr Size Followed by
15a195c8 0.8MB 15ae3950 System.Collections.ArrayList
15d81468 1.6MB 15f23708 System.String
15f23984 1.0MB 16029ae4 System.String
... about 7 more objects here
1ee51764 0.5MB 1eedbaa4 System.WeakReference
1f0df96c 2.4MB 1f34d4b0 System.String
1f3e1ca8 3.7MB 1f79afc4 System.WeakReference
Ich habe über Pinning und Fragmentierung gelesen. Sein schaut mir fragmentiert die enorme Menge an freien Raum gegeben. Ich denke, ich muss jetzt es aufzuspüren.
Die Gedanken? Feedback?
Lösung
So ... wir wissen, dass wir eine fragmentierte Haufen haben. Die nächste Frage ist: was die Fragmentierung verursacht? Was hält von diesen freien Objekte freigegeben werden? Die Empfehlungen, die ich gelesen habe ist es, die Objekte direkt nach dem freien Raum zu untersuchen:
-
! Dumpheap -stat
-
Dump die Methodentabelle des Frei Objekt: dumpheap -mt 000db8e8
-
Wählen Sie ein freies Objekt aus der Liste genauer zu untersuchen: dumpobj 0x2003b0b0
-
Nehmen Sie die Größe des Objekts
-
Dump das nächste Objekt, nachdem es: dumpobj 0x2003b0b0 + 1000
-
Finden Sie das Objekt, die eine Referenz! Gcroot 0x2003b0b0 + 1000
-
die GCHandle des gefundenen Objekts Dump.
Ich bekomme diesen Kaninchenbau hinunter, und mein begrenztes Wissen über den .NET-API nicht hier. Ist dies der richtige Weg, um das Problem zu debuggen?
Jeff