Как уменьшить потребление памяти приложением в диспетчере задач - PullRequest
0 голосов
/ 17 марта 2009

Я разработал приложение winforms, использующее C # в VS2008. Когда я запускал это приложение, я заметил в диспетчере задач, что он показывает 80 МБ памяти, используемой Как я могу уменьшить это? Даже очень маленькие приложения также занимают 8 МБ памяти ...

Что я могу сделать, чтобы уменьшить объем памяти?

Большое спасибо заранее.

Ответы [ 4 ]

3 голосов
/ 17 марта 2009

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

public static void RefreshMemory() {
    try {
        Process curProc = Process.GetCurrentProcess();
        curProc.MaxWorkingSet = curProc.MaxWorkingSet;
    } catch {
        // Handle the exception
    }
}

Было бы также полезно отследить использование объектов памяти с помощью такого инструмента, как JetBrains dotTrace или другого аналогичного.

2 голосов
/ 17 марта 2009

Ваш вопрос явно пахнет преждевременной оптимизацией.

Использовать память следует только в следующих ситуациях:

  1. Вы разрабатываете устройство, в котором недостаточно памяти (например, с помощью переносимого .net framework)
  2. Вы достигли предела .net с точки зрения объема памяти (то есть около 1,3 Гбит / с)
  3. Ваши клиенты жалуются.

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

2 голосов
/ 17 марта 2009

Что ж, платформа .NET имеет довольно значительные накладные расходы - как вы заметили, самое простое из возможных консольных приложений "hello world" имеет рабочий набор 4 МБ. Есть несколько вещей, которые вы можете сделать, чтобы уменьшить объем используемой памяти (сократить встроенные ресурсы, не забудьте встроить конфигурацию выпуска и т. Д.)

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

0 голосов
/ 17 марта 2009

В дополнение ко всем предыдущим хорошим комментариям, пожалуйста, помните, что числа, которые вы видите в диспетчере задач: виртуальная память , а не физическая память. Фактический объем физической оперативной памяти, используемой программой, не является очевидным при просмотре диспетчера задач. Кроме того, диспетчер задач показывает вам серию снимков - если у вас действительно возникла проблема, вы захотите посмотреть на нее с течением времени, с Perfmon или чем-то еще, в дополнение к отличному предложению по профилированию с помощью dotTrace JetBrains.

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

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