C # - проблема памяти приложения - PullRequest
2 голосов
/ 31 июля 2010

Я написал небольшое приложение WinForm на C #. Созданный EXE-файл 74 КБ и все вместе с ресурсами и размерами 179 КБ Но когда я запускаю его, это занимает 9,1 МБ в памяти в соответствии с диспетчером задач.

Итак, мой вопрос:

  • Почему это происходит?
  • Что я могу сделать, чтобы уменьшить размер этого?
  • Если размер можно уменьшить, насколько это возможно?

Ответы [ 3 ]

3 голосов
/ 31 июля 2010

Во-первых, использование диспетчера задач для определения использования памяти чревато опасностью.Прочитайте эту статью , чтобы лучше понять ее.

  • На какие другие библиотеки вы ссылаетесь?
  • Какие файлы вы загружаете в потокиили любым другим способом?
  • Какие ресурсы вы запрашиваете у операционной системы через P / Invoke
  • Сколько экземпляров каждой формы вы загружаете?
  • Сколько переменных делаютвы создаете, и какого размера?

Например:

// Will take up a lot of memory!
var x = new byte[int.MaxValue];

Все это говорит о том, что 9.1Mb на самом деле не много (менее 0,5% памяти нахарактеристики машины (2 ГБ ОЗУ) и, что более важно, действительно ли имеет значение, что ваше приложение использует 9,1 МБ ОЗУ, или вы тратите время на исследование? Помните, ваше время ценно.Ваши конечные пользователи предпочли бы потратить время на что-то еще?=) * +1022 *

2 голосов
/ 31 июля 2010

Размер исполняемого файла и использование памяти - это два совершенно разных понятия.Например, эта простая программа:

class Program
{
    static void Main()
    {
        var b = new byte[int.MaxValue];
    }
}

занимает всего 4 КБ, но она использует всю доступную оперативную память на вашем компьютере и вылетает.Это должно продемонстрировать вам, что у вас может быть чрезвычайно простое приложение, но в зависимости от того, что оно делает, оно может потреблять много памяти.Итак, что делает ваше приложение?

0 голосов
/ 31 июля 2010

Использование памяти программой не на 100% связано с размером ее двоичного файла или ресурсов.

Это зависит от того, что делает ваша программа. Например, если вы создаете что-то вроде этого:

List<int> list = new List<int>();
for (i=1; i<100000; i++) list.Add(i);

Это займет столько памяти, сколько нужно для хранения целых чисел плюс накладные расходы на объект.

И это зависит от того, что вы использовали.

Вы пометили свой пост winforms - я полагаю, у вас есть приложение графического интерфейса. Использование памяти графическим интерфейсом зависит от используемых элементов управления и стиля графического интерфейса (например, анимации, эффектов наведения ...)

И .NET имеет сборщик мусора, который освобождает неиспользуемую память во время выполнения.

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