سؤال

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. !dumpheap -stat

  2. تفريغ جدول الطريقة للكائن الحر:!dumpheap -mt 000db8e8

  3. حدد كائنًا مجانيًا واحدًا من القائمة لفحصه عن كثب:!dumpobj 0x2003b0b0

  4. سجل حجم الكائن

  5. تفريغ الكائن التالي بعده:!dumpobj 0x2003b0b0+1000

  6. ابحث عن الكائن الذي يحمل مرجعًا !gcroot 0x2003b0b0+1000

  7. تفريغ gchandle للكائن الذي تم العثور عليه.

عادةً ما أواجه هذه المشكلة، وتفشل هنا معرفتي المحدودة بـ .NET API.هل هذه هي الطريقة الصحيحة لتصحيح المشكلة؟

جيف

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top