C # - Как узнать, если система имеет виртуальную память / файл подкачки на? - PullRequest
0 голосов
/ 21 мая 2018

У меня есть приложение, которое потребляет большое количество оперативной памяти, которое я развертываю для пользователей.Некоторые из моих пользователей сталкиваются с нехваткой памяти при запуске - и я замечаю, что это потому, что у них отключен системный файл подкачки (потому что, кто будет использовать 16 ГБ памяти в эти дни? Вздох ...).Я хочу определить, отключил ли пользователь этот параметр (или, может быть, некоторые другие параметры), чтобы я мог их предупредить, потому что к нам обращаются многие пользователи, и я хочу автоматизировать некоторых пользователей, потому что они едятЯ потратил много времени.

Я погуглил и не могу найти способ получить информацию о файле подкачки.В частности, я имею в виду информацию, которую вы можете увидеть на этой странице в Windows: Page file settings in windows

Я знаю, что это проблема наших конечных пользователей и не имеет ничего общего с нашим приложением (нашим приложением)разработан, чтобы использовать хороший кусок памяти и получает значительное преимущество в скорости).Я не уверен, как определить такие настройки - у кого-нибудь есть идея?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Вам нужно будет предварительно добавить ссылку на System.Management.

AllocatedBaseSize покажет текущий размер файла подкачки в МБ

using (var query = new ManagementObjectSearcher("SELECT AllocatedBaseSize FROM Win32_PageFileUsage"))
        {
            foreach (ManagementBaseObject obj in query.Get())
            {
                uint used = (uint)obj.GetPropertyValue("AllocatedBaseSize");
                Console.WriteLine(used);
            }
        }

Пока MaximumSize покажет максимальный размер файла подкачки в МБ, , если пользователь установит максимальный размер (если система управляет им, запрос ничего не даст).

using (var query = new ManagementObjectSearcher("SELECT MaximumSize FROM Win32_PageFileSetting"))
        {
            foreach (ManagementBaseObject obj in query.Get())
            {
                uint max = (uint)obj.GetPropertyValue("MaximumSize");
                Console.WriteLine(max);
            }
        }

Если AllocatedBaseSize меньше, чем то, что будет использовать ваше приложение, а MaximumSize достаточно велик для вашего приложения (или его системы), вам нужно будет рассмотреть крайний случай, когда хранилища недостаточно для роста Windows.Файл подкачки.Даже если в начале достаточно места, пользователь может загружать большой файл в другую программу или воспроизводить большое видео во время работы приложения.Подумайте о том, чтобы предложить режим «мало места», когда ваше приложение может работать медленнее, но не потреблять столько памяти.

0 голосов
/ 21 мая 2018

Хотя у меня нет полноценного рабочего решения для вас, я думаю, что информация, которую вы ищете, может быть получена из Win32_PageFileUsage WMI класса .Свойство AllocatedBaseSize должно содержать информацию, которую вы ищете:

AllocatedBaseSize

Тип данных: uint32

Тип доступа: Чтениетолько

Спецификаторы: MappingStrings ("Win32API | MEMORYSTATUS | dwTotalPageFile"), единицы ("мегабайты")

Фактический объем дискового пространства, выделенного для использования с этим файлом страницы.Это значение соответствует диапазону, установленному в Win32_PageFileSetting в свойствах InitialSize и MaximumSize, установленных при запуске системы.Пример: 178

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