Здравствуйте, alexeiz, Вы писали:
A>OK. Видно, что vadump нам не соврал. Действительно GC heap в данный момент отнимает ~8.4MB памяти. Однако, не весь GC Heap занят живыми объектами. Какая-то его часть свободна. Это можно узнать, пройдя по всем объектам в хипе:
A>A>0:004> !dumpheap -stat
A>total 232157 objects
A>Statistics:
A> MT Count TotalSize Class Name
A>7b4c3800 1 12 System.Windows.Forms.DataGridViewColumnCollection+ColumnOrderComparer
A>7b47ef7c 1 12 System.Windows.Forms.SR
A>…
A>7b46d674 40543 648688 System.Windows.Forms.PropertyStore
A>7b4c7f0c 30006 960192 System.Windows.Forms.DataGridViewTextBoxCell
A>7b49bf58 30176 967352 System.Windows.Forms.PropertyStore+IntegerEntry[]
A>7b49c090 30260 973380 System.Windows.Forms.PropertyStore+ObjectEntry[]
A>00152a70 16158 1291624 Free
A>790fa3e0 36516 1829392 System.String
A>Total 232157 objects
A>
A>Теперь понятно, что свободно у нас около 1.3MB. Это та память, которую GC может в принципе отдать OS, но он этого не сделает, потому как по сравнению с полным размером GC Heap (8.4MB) это очень мало. Для compacting GC нормально иметь вдвое больше памяти, чем требуется для живых объектов.
Меня больше привлек такой момент: Free + System.String = 3121016 — что как раз таки показывает прожорливость System.Windows.Forms, а отнюдь не прожорливость GC.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>