У меня есть приложение C#, которое иногда без особой причины будет занимать значительные объемы памяти. Я взял дамп и импортировал его в Dotmemory Решарпера. Несмотря на то, что все объекты памяти в тот момент занимали 1,4 ГБ, объем используемой процессом памяти был в 10 раз больше. Я заметил, что Heap Generation 0 показал, что он невероятно фрагментирован с использованием 52,5 МБ и почти 10 ГБ свободного места среди примерно 5 МБ закрепленных объектов.
Мой вопрос Windows резервирует весь сегмент памяти, включенный в кучу, для процесса, хотя на самом деле используется так мало его? Если бы эти объекты не были закреплены, Gen 0 был бы сжат, и куча сократилась бы в геометрической прогрессии, но я вполне уверен, что управляемый код отвечает за эти объекты, поэтому я не контролирую это.