Как я полагаю, вы намекаете в своем посте, медленное время отклика, вероятно, хотя бы частично связано с задержками в системе, в то время как ОС записывает содержимое памяти в файл подкачки, чтобы освободить место для других процессов в физической памяти.
Очевидное решение (и, возможно, не практичное) состоит в том, чтобы использовать меньше памяти в вашем приложении. Я предполагаю, что это не вариант или, по крайней мере, не простой вариант. Альтернатива состоит в том, чтобы попытаться активно сбрасывать данные на диск, чтобы постоянно поддерживать доступную физическую память для запуска других приложений. Вы можете найти общий объем памяти на компьютере с помощью GlobalMemoryStatusEx . И GetProcessMemoryInfo вернет текущую информацию об использовании памяти вашим собственным приложением. Поскольку вы говорите, что используете файл с отображенной памятью, возможно, вам придется учесть это дополнительно. Например, я полагаю, что информация PageFileUsage
, возвращаемая этим API, не будет включать информацию о вашем собственном файле отображения памяти.
Если ваше приложение отслеживает использование, вы можете использовать FlushViewOfFile для принудительного принудительного принудительного переноса данных на диск из памяти. Существует также API (EmptyWorkingSet), который, я думаю, пытается записать как можно больше грязных страниц на диск, но кажется, что это может значительно снизить производительность вашего собственного приложения. Хотя это может быть полезно в ситуации, когда вы знаете, что ваше приложение переходит в некое состояние ожидания.
И, наконец, еще один API, который может быть полезен: SetProcessWorkingSetSizeEx . Вы можете рассмотреть возможность использования этого API, чтобы дать подсказку о верхнем пределе размера рабочего набора вашего приложения. Это может помочь сохранить больше памяти для других приложений.
Редактировать : Это еще одно очевидное утверждение, но я забыл упомянуть его ранее. Это также может быть непрактичным для вас, но, похоже, одна из лучших вещей, которую вы могли бы сделать, учитывая, что у вас 32-разрядные ограничения, - это создать приложение как 64-разрядное и запустить его на 64-разрядной ОС ( и брось немного больше памяти на машину).