Ограничить использование физической памяти процессом (чтобы система реагировала)? - PullRequest
2 голосов
/ 29 марта 2012

Хотя подобные вопросы обсуждались здесь и в других местах, я не смог найти решение следующей проблемы. В Windows 7 Professional (64-разрядная версия) я работаю над приложением, которому временно требуется гораздо больше виртуальной памяти, чем доступной физической памяти. Чтобы смоделировать это, я написал небольшую программу, которая в основном делает это:

size_t sum = 0;
std::unique_ptr<unsigned char[]> data(new unsigned char[size]);

for(size_t i = 0; i < size; ++i)
    data[i] = static_cast<unsigned char>(i);

for(size_t i = 0; i < size; ++i)
    sum += data[i];

В диспетчере задач можно заметить, что использование памяти быстро увеличивается во время первого цикла (когда память, зарезервированная "new", фактически фиксируется). Как только кривая памяти достигает предела физической памяти, система перестает работать (даже курсор мыши больше не движется).

Вопрос заключается в том, как я могу предотвратить использование процесса всей физической памяти, чтобы другие процессы оставались доступными для других процессов. Я думал, что SetProcessWorkingSetSizeEx () с флагом QUOTA_LIMITS_HARDWS_MAX_ENABLE решит эту проблему, но это не так. Хотя размер рабочего набора процесса остается ниже предела в соответствии с монитором ресурсов, кривая использования памяти в диспетчере задач такая же, как без SetProcessWorkingSetSizeEx (), и система перестает отвечать на запросы, когда физическая память исчерпана.

Я не против, если сам процесс работает менее чем оптимально из-за сбоев страниц, но это не должно влиять на всю систему. У вас есть идея, как этого добиться?

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