Можно ли намекнуть диспетчеру виртуальной памяти Windows, чтобы вывести определенный процесс из свопинга?
Ситуация, в которой я часто нахожусь, обычно использует около 50% моей оперативной памяти для всех обычных программ, одной из которых является IDE для встроенной цели вместе со связанным с ней отладчиком.
Затем я оставляю процесс, требующий памяти, - например, wireshark или что-то, что накапливает данные за выходные, все поменяется местами - как они должны. После завершения большого процесса большинство процессов остаются в свопе.
Затем случайные паузы для замены процесса снова вызывают проблемы с отладчиком, предположительно из-за проблем синхронизации в коммуникациях между IDE и аппаратным отладчиком. Таким образом, управление целевым устройством может быть спорадическим до тех пор, пока достаточное количество попыток не вернет отладочные данные в среде IDE.
Ответы:
KerrekSB разработал специальный инструмент для этой цели:
/programming//a/2940209/684229
Он доступен на GiTHUB с двоичными файлами: https://github.com/louisdx/unpage
Во время выполнения вы получаете множество ошибок «Не удалось прочитать один байт из 0x .... 000, ошибка 299 (прочитано 0 байт)», но это не проблема, инструмент работает отлично.
источник
After the big process is finished, most processes are left in swap.
. По-видимому, он уже закончил «процесс, требующий памяти».if (meminfo.Protect > 50) { std::cerr << meminfo.Protect << " - " << PAGE_GUARD << std::endl; }
раз передReadProcessMemory
строкой. PAGE_GUARD - 256, а я получил 260 с ошибочными страницами. Так что от ошибок можно избавиться. Кто-то с некоторыми знаниями C ++ и Paging должен прочитать бит PAGE_GUARD.Вы можете использовать Process Lasso, чтобы дать процессу приоритет страницы памяти :
Процесс Lasso имеет две версии: бесплатную и коммерческую (18,95 долларов США с пробной версией).
источник