Почему Process.PagedMemorySize64> 0, если на компьютере нет памяти подкачки? - PullRequest
0 голосов
/ 16 февраля 2010

Я запускаю .net код на машине с размером файла подкачки, установленным в ноль. Мое приложение регистрирует System.Diagnostics.Process.PagedMemorySize64 и показывает значение> 0.

Как это может быть?

Документация для PagedMemorySize64 гласит:

Значение, возвращаемое этим свойством, представляет текущий размер памяти в файле подкачки виртуальной памяти, используемом процессом.

Чего мне не хватает?

Справка:
Я делаю это, пытаясь определить, есть ли у меня утечка памяти. Я использую профиль, который не показывает никакого роста, но значения памяти из System.Diagnostics.Process продолжают увеличиваться.

Я думаю, что могу иметь дело с фрагментацией кучи больших объектов. Моя программа отображает слайд-шоу WPF больших изображений с анимацией затухания между изображениями.

Любое объяснение приветствуется.

Спасибо.

1 Ответ

1 голос
/ 16 февраля 2010

Я думаю, что описание вводит в заблуждение. Практически все страницы виртуальной памяти в процессе являются постраничными. Но они не обязательно попадают в файл подкачки. Любой код, загруженный из DLL, не должен храниться там. Диспетчер памяти просто отбрасывает страницу, когда ему нужно место, и перезагружает ее из библиотеки DLL, когда ее нужно заменить обратно.

В .NET-процессе это будут по крайней мере страницы, отображаемые для кода для CLR, JIT-компилятора и любых сборок Ngen-ed. Все сборки .NET Framework являются Ngen-ed. Файл подкачки будет использоваться для остального, любого JIT-скомпилированного кода и данных.

Этот номер не поможет диагностировать утечки. Он постоянно меняется, и вы ничего не сделаете, чтобы менеджер памяти принял непосредственное решение поменять страницу. Возможно, кроме сворачивания основного окна вашей программы, это заставляет менеджер памяти агрессивно обрезать рабочий набор (= количество страниц, находящихся в ОЗУ). Получить хороший профилировщик памяти, чтобы продвинуться.

...