Использование памяти Winforms приложения - PullRequest
2 голосов
/ 18 апреля 2009

в любом случае я могу попросить мое приложение сказать, сколько памяти у пользователя, и если приложение приближается к тому, чтобы занять высокий процент от этого.

также, как узнать, сколько памяти машина выделяет для ОС, видеокарт и т. .

например, если у вас есть 4 ГБ памяти, сколько фактической памяти отводится приложениям, вы можете настроить это.

Ответы [ 4 ]

2 голосов
/ 18 апреля 2009

Я думаю, что прочитал вопрос немного по-другому, так что, надеюсь, этот ответ не слишком не по теме!

Вы можете получить хороший обзор того, сколько памяти использует ваше приложение, используя диспетчер задач Windows или, что еще лучше, Sysinternals Process Monitor . Это быстрый способ проверить ваши процессы на их пиках, чтобы увидеть, как они себя ведут.

Из коробки процесс x86 сможет адресовать только 2 ГБ ОЗУ. Это означает, что любой отдельный процесс на вашей машине может потреблять до 2 ГБ. В действительности вы, вероятно, сможете потреблять только 1,5-1,8 до исключения исключений из памяти.

Сколько оперативной памяти может адресовать ваша копия Windows, зависит от версии Windows и архитектуры процессора.

Используя ваш пример 4 ГБ ОЗУ, ОС предоставит вашим приложениям до 2 ГБ ОЗУ для воспроизведения (которое совместно используется всеми процессами) и зарезервирует для себя 2 ГБ.

В зависимости от используемой операционной системы вы можете настроить его, используя параметр / 3GB в файле boot.ini, который отрегулирует это соотношение до 3 ГБ для приложений и 1 ГБ для ОС. Это оказывает некоторое влияние на ОС, поэтому я сначала рассмотрю это влияние и посмотрим, сможете ли вы жить с компромиссом (YMMV).

Для того чтобы одно приложение могло адресовать больше / 3 ГБ, вам нужно будет установить определенный бит в заголовке образа PE. В этом вопросе / ответе уже есть хорошая информация по этому вопросу.

Игра меняется под архитектуру x64. :)

Хорошая справочная информация:

Ограничения памяти для выпусков Windows

Виртуальное адресное пространство

2 голосов
/ 18 апреля 2009

в любом случае, я могу попросить мое приложение сказать, сколько памяти у пользователя, и если приложение приближается к тому, чтобы занять высокий процент от этого.

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

также, как узнать, сколько памяти машина выделяет для ОС, видеокарт и т. .

Опять же, этот должен быть возможен при использовании вызовов WMI, но главный вопрос в том, зачем вам это нужно?

например, если у вас есть 4 ГБ памяти, сколько фактической памяти отводится приложениям, вы можете настроить это.

Нет, это не настраиваемое значение. При запуске приложения .NET операционная система выделяет блок памяти для использования. Это обрабатывается ОС, и нет способа настроить алгоритмы, используемые для определения объема памяти, выделяемой. Аналогично, нет способа настроить, какой объем памяти использует среда выполнения .NET для управляемой кучи, стека, кучи больших объектов и т. Д.

0 голосов
/ 18 апреля 2009

Если вы не хотите использовать WMI, вы можете использовать GlobalMemoryStatusEx ():

Вызов функции:
http://www.pinvoke.net/default.aspx/kernel32/GlobalMemoryStatusEx.html

Возвращаемые данные:
http://www.pinvoke.net/default.aspx/Structures/MEMORYSTATUSEX.html

MemoryLoad даст вам число от 0 до 100, которое представляет собой ~ процент используемой физической памяти, а TotalPhys сообщит вам общий объем физической памяти в байтах.

Память сложна, потому что используемая память представляет собой смесь физического (ram) и виртуального (page-файла) типов. Конкретное сочетание и то, что и куда, определяется операционной системой. К счастью, это несколько настраивается, поскольку Windows позволяет вам указать, сколько виртуальной памяти использовать, если таковая имеется.

Обратите внимание, что не вся память в 32-битной Windows (XP & Vista) доступна для использования. Windows может сообщить об установленном объеме до 4 ГБ, но только 3,1-3,2 ГБ доступно для фактического использования операционной системой и приложениями. Это связано с унаследованными проблемами решения IIRC.

Удачи

0 голосов
/ 18 апреля 2009

Я думаю, что вы можете использовать WMI, чтобы получить всю эту информацию

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