Проблема заключается в том, что когда другая программа (например, explorer.exe) будет выполняться, весь ее код и память будут выгружены. Чтобы освободить место для другой программы, Windows сначала необходимо записать данные, которые ваша программа использует, на диск, а затем загрузить память другой программы. Каждая новая страница кода, которая выполняется в другой программе, требует доступа к диску, что приводит к ее медленной работе.
Я не знаю схему доступа к вашей программе, но я предполагаю, что она затрагивает все страницы памяти случайным образом, что усугубляет проблему, потому что, как только Windows извлекает страницу памяти из вашей программа, вдруг вам снова это нужно, и Windows должна найти какую-то другую страницу для такой же обработки.
Чтобы дать другим процессам больше оперативной памяти для жизни, вы можете использовать SetProcessWorkingSetSize , чтобы уменьшить максимальный объем оперативной памяти, который может использовать ваша программа. Конечно, это заставит вашу программу работать медленнее, потому что она должна выполнять больше операций подкачки.
Еще одна альтернатива, которую вы можете попробовать, - это добавить больше дисков в систему и распределить между ними файлы подкачки. У вас может быть двухъядерный процессор, но у вас есть только один диск. Распределение файла подкачки по нескольким дискам позволяет Windows сбалансировать работу между ними (хотя у меня нет непосредственного опыта, насколько хорошо это происходит).