Означает ли процесс убийства свободную использованную память?
У меня есть служба, которая каждую секунду запускает внешние exe-программы (например, process1.exe) и убивает их. Taskmgr - показать только один процесс. После запуска сервиса я получаю минимальное количество свободной памяти. Сумма памяти всех процессов и общее использование памяти не равны. Когда я запускаю процессы RamMap, я вижу много расширяющегося procces1.exe. Похоже, процесс убийства не означает освобождение памяти.
Можете ли вы посоветовать Windows Soft для обнаружения утечек памяти?
3 ответа
Современные операционные системы избегают освобождения памяти, если у них есть другой выбор. Смотрите этот ответ для более подробной информации. Если страница грязная, имеет общий доступ или имеет имя в файловой системе, доступ к странице все равно возможен, поэтому нет необходимости делать ее свободной. Только если эта страница не является общей и анонимной, она будет освобождена.
Если вы уничтожите процесс, память может все еще быть занята уничтоженным процессом, но если это понадобится другой запущенной программе / службе, она будет освобождена. Вы можете использовать некоторое программное обеспечение для автоматического освобождения памяти, но только думаете, что оно пытается использовать как можно больше памяти, поэтому операционная система освободит его.
Кажется, ваш сервис не закрывает дескриптор после того, как убивает внешнюю программу. Другая возможная проблема - глючный драйвер. Смотрите также: RamMap показывает миллионы процессов, которые не выполняет диспетчер задач (ответ).