VirtualLock по умолчанию исчерпает квоту в спешке, даже если вы разрешите пользователю (по умолчанию параметр политики безопасности «Блокировка страниц в памяти» не имеет записей (даже администратор)).
Если вы все-таки настроите это, вам также понадобится установить «Настройка квот памяти для процесса».
Этот вопрос немного двусмысленный. Какую часть пространства виртуальных машин вы хотите предотвратить, чтобы его поменяли? Heap / Стеки / модуль? ...?
В целом, одно из решений, которое я использовал в прошлом, - это создание библиотеки DLL с большим разделом, который был бы READ + WRITE, неподвижным, вы также можете пометить его как EXECUTE и SHARED, если это необходимо, но тогда я бы добавил HeapCreate в раздел этого модуля, что позволяет мне использовать его как кучу.
Вы можете посмотреть точные биты, чтобы установить здесь , IMAGE_SCN_MEM_NOT_PAGED
выглядит так, как будто это поможет.
Если вы выполните маркировку всех модулей и разделов этим битом, загрузчик модулей Windows не будет взимать конкретную пользовательскую квоту или потребует изменения параметров политики в каждой системе, в которой вы развертываете свой код. Вам нужно будет кодировать в специальную оболочку, чтобы обеспечить доступ к HEAP, которые вы создаете, в эти библиотеки NON_PAGEABLE.
Это немного трудная работа, но в прошлом она работала хорошо, у меня было дополнительное требование распределять память между несколькими процессами, которая была основана на одном и том же адресе.
Я думаю, что проще всего было бы полностью отключить файл подкачки. Но перед этим, если вы используете операционные системы Vista / 2008 +, вы заметите, что обмен может произойти из-за супер-выборки, которая может проактивно «настроить» вашу систему с предположением, что в ближайшем будущем вам нужно будет использовать одно или другое приложение. Другими простыми задачами могут быть остановка неиспользуемых сервисов, таких как поиск, которые могут индексировать огромное количество файлов, также вам следует обратиться к своему «планировщику задач», который настраивает системные задачи, по умолчанию в большинстве систем по умолчанию есть несколько десятков. действие, которое передаст все дампы доктора Ватсона в MS, дефрагментирует ваш диск и ряд других операций, которые могут потребовать слишком много памяти.
Вы могли бы ответить немного более подробно, чтобы получить более точные ответы ... но еще одно предложение состояло бы в том, чтобы просто купить большой твердотельный накопитель и использовать его исключительно для подкачки, остерегаясь, что они со временем ухудшают общую производительность и размер из-за неправильных отображений блоков, которые являются общими для всех существующих технологий SSD.
Недавно я столкнулся с проектом codeplex под названием "non-paged host clr" , со своей страницы:
Реализация С точки зрения реализации,
хост невыгружаемого CLR использует
SetProcessWorkingSetSize ,
SetProcessWorkingSetSizeEx (в Windows
Server 2003 и выше) и VirtualLock
API для обеспечения выделения памяти
он заперт в физической памяти.
Обратите внимание, что использование вышеуказанных API делает
не гарантия с абсолютной уверенностью
что никакой подкачки не произойдет; вместо этого
сводит к минимуму шансы на
очень исключительные сценарии. В некоторых
нагрузочные тесты, которые мы провели, даже
когда система в целом была перегружена
из-за недостатка физической памяти нет страницы
сбоев в процессе не наблюдалось
с использованием хоста CLR без пейджинга.