Как минимизировать использование памяти в Windows - PullRequest
2 голосов
/ 07 марта 2011

Я написал программу hello world (приложение для Windows без интерфейса) на C #. Excutable для build-build ничего не делает, кроме Thread.Sleep (50000) // 50 секунд. Я открыл sysinternals (профилировщик, как диспетчер задач). Это излишняя память 7 МБ (частные байты)! Кто-нибудь может объяснить, что происходит и как уменьшить использование памяти. Постскриптум Я также попытался использовать NGEN для предварительной компиляции .exe, но все равно получил такое же использование памяти.

Большое спасибо

Ответы [ 2 ]

5 голосов
/ 07 марта 2011

C # (и другие скомпилированные / интерпретируемые языки JIT) обычно в фоновом режиме делают для вас многое. Хотя то, что вы написали, просто, в фоновом режиме происходит много вещей, поддерживающих JIT-природу приложения.

То, что 7 МБ памяти относительно мало, учитывая, что 2 ГБ ОЗУ в наши дни довольно распространено. И это, вероятно, не увеличится, если вы не сделаете что-то необычное или не выделите много массивов и структур данных.

Если это Hello World, основанный на типе проекта C # WindowsApplication, и в Program.cs есть int int, выполняющий application.run в форме Windows, тогда не только много JIT, но и много накладных расходов Windows Forms тоже.

Конец дня, я уверен, что все прекрасно.

2 голосов
/ 07 марта 2011

.Net приложения имеют много основных накладных расходов, но после этого ваш объем памяти должен быть относительно небольшим.

Пример. Мое одно приложение потребляет 10 МБ памяти при загрузке, но оно потребляет только 40 МБ памяти после загрузки 60 КБ строк из базы данных, каждая строка содержит несколько строк и много значений.

Небольшое фиксированное начальное значение не так уж плохо на современных компьютерах. Масштабируемость является основной проблемой в наши дни. .Net достаточно хорошо масштабируется за то, что им управляют.

...