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