Also ... wir wissen, dass wir einen fragmentierten Haufen haben. Die nächste Frage ist: Was verursacht die Fragmentierung? Was verhindert, dass diese freien Objekte freigegeben werden? Die Empfehlungen, die ich gelesen habe, sollen die Objekte direkt nach dem freien Raum untersuchen:
1)! dumpheap -stat 2) Dump die Methodentabelle des freien Objekts:! Dumpheap -mt 000db8e8 3) Wählen Sie ein freies Objekt aus der Liste aus, um es näher zu untersuchen:! Dumpobj 0x2003b0b0 4) Notieren Sie die Größe des Objekts 5) Dump das nächste Objekt danach:! Dumpobj 0x2003b0b0 + 1000 6) Finden Sie das Objekt mit der Referenz! Gcroot 0x2003b0b0 + 1000 7) Dump die gchandle des gefundenen Objekts.
Ich gehe normalerweise in dieses Kaninchenloch, und mein begrenztes Wissen über die .NET API schlägt hier fehl. Ist dies der richtige Weg, um das Problem zu beheben?
Jeff
Tags und Links memory .net windbg heap-fragmentation