문제

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

나는 고정과 조각화에 대해 읽었습니다. 방대한 양의 여유 공간을 감안할 때 나에게 조각화 된 것 같습니다. 이제 추적해야한다고 생각합니다.

생각? 피드백?

도움이 되었습니까?

해결책

그래서 ... 우리는 우리에게 조각난 힙이 있다는 것을 알고 있습니다. 다음 질문은 : 조각화를 일으키는 원인은 무엇입니까? 이 무료 개체가 출시되는 것을 막는 것은 무엇입니까? 내가 읽은 권장 사항은 여유 공간 직후에 물체를 검사하는 것입니다.

  1. ! tumpheap -stat

  2. 자유 객체의 메소드 테이블을 덤프하십시오 :! tumpheap -mt 000db8e8

  3. 목록에서 하나의 무료 개체를 선택하여 더 자세히 검사하십시오.! tumpobj 0x2003b0b0

  4. 물체의 크기를 기록하십시오

  5. 다음 객체를 덤프합니다 :! dumpobj 0x2003b0b0+1000

  6. 참조를 고정하는 객체 찾기! Gcroot 0x2003B0B0+1000

  7. 발견 된 물체의 gchandle을 버립니다.

나는 보통이 토끼 구멍을 내려 놓고 .NET API에 대한 제한된 지식이 여기에서 실패합니다. 이것이 문제를 디버깅하는 올바른 방법입니까?

제프

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top