.NET Committed против зарезервированного размера кучи - PullRequest
2 голосов
/ 14 июня 2009

В моей программе 7 667 712 байт выделенной кучи, но в ней 33 546 240 зарезервированных кучи! Я вижу, что программа использует около 44 МБ частных байтов. Как я могу заставить .NET GC резервировать меньше места для управляемой кучи?

Ответы [ 2 ]

6 голосов
/ 14 июня 2009

То, что ваш процесс зарезервировал память, не означает, что она использует эту память.

В Windows зарезервированная память означает, что ваш процесс отобразил страницы в это адресное пространство. Физическая память распределяется путем фиксации этих зарезервированных страниц. Конечно, даже тогда вы не обязательно используете эту память, потому что зафиксированные страницы могут быть выгружены в файл подкачки, временно освобождая основную физическую память.

Короче говоря, это не то, о чем вам (как правило) нужно беспокоиться. Какую проблему вы пытаетесь решить?

3 голосов
/ 14 июня 2009

Самый простой ответ: ты не можешь. .Net GC самонастраивается, он охотно резервирует память, однако он не фиксирует память до тех пор, пока она не понадобится, когда память больше не нужна, он снова зарезервирован.

GC освобождает память при высоком давлении памяти на машине.

33 МБ не так велико, так как по умолчанию (если ваш процесс 32-битный и вы работаете в режиме GC рабочей станции), у вас будет сегмент по умолчанию, зарезервированный для кучи небольших объектов, который составляет 16 МБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...