2009-05-28 1 views
0

Мне в основном любопытно, и это не проблема. Обычно мои приложения (C++) используют очень мало памяти. Я думал, что мое текущее приложение займет небольшую память, но оно использует 3.7mb и VM размером 17.3mb. Приложение имеет 4 значка в своем файле ресурсов, 4 ints в локальных (пользовательских) настройках и приложение LoC - < 1k. Он обнаруживает keyinput и записывает строку в списке, когда пользователь переходит в режим ожидания (вызывает функцию Windows). Он попал в системный лоток и установил таймер на 100 мс.C# GUI использует много барана?

Theres no arrays или любое хранилище, за исключением нескольких структур, размер которых меньше 256 байтов. Почему мое приложение использует 17mb + VM?

+0

Сообщите нам, что вы используете. WinForms/WPF/...? – Noldorin

+1

Я подозреваю, что вы путаете виртуальную память с физической памятью. Это очень разные звери. FYI, я буду публиковать статью в блоге на следующей неделе, которая объясняет разницу. –

ответ

4

17 мега звуков, подходящих для простого приложения C#.

Я думаю, что это многолетний аргумент «Использование аппаратного обеспечения против программиста».

10

Поскольку это управляемое приложение, часть CLR также будет загружена в память. Кроме того, CLR будет выделять кучу памяти, чтобы она могла удовлетворять новым объектным запросам (она не выделяет каждый объект из системы). Также есть множество других объектов, которые распределяются для каждого приложения в управляемой модели (например, пул потоков, сборщик мусора и т. Д.).

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

2

Что-то иметь в виду, что каждый управляемый поток имеет стек 1 МБ. Если вы делаете что-либо с потоками, это сразу несколько MB.

4

Захватите .NET memory profiler, если вы хотите точно узнать, что происходит с этой памятью.

3

Программы, написанные на платформе .NET, изначально имеют больше накладных расходов.

2

Не беспокойтесь о потреблении памяти для приложения Hello World.

Управляемое языковое приложение обрабатывает использование своей памяти иначе, чем, скажем, C, где каждое распределение памяти имеет риск не быть освобожденным. В некоторых случаях приложение .NET может даже работать быстрее, чем эквивалентное приложение, написанное на C++, если приложение тратит много времени в malloc/dealloc, потому что CLR может откладывать удаление/сбор мусора до тех пор, пока приложение не будет работать.

Смежные вопросы