C# WinForms Размер приложения и потребление ОЗУ Почему так происходит и как это исправить? При написании легкого приложения, где используются 3 формы всего и пару переменных, для счетчика (таймера типа), приложение весит ~30 КБ, а занимает ОЗУ начиная от ~13 МБ и доходит до ~24 МБ.
Аналогичное приложение с большим, даже очень большим функционалом для своего жанра приложение весит ~300 КБ, а занимает ОЗУ начиная от ~4 МБ и доходит до ~13 МБ. Написано это приложение тоже на C#. Есть еще 1 приложение уже функционал меньше, меньше моего приложения, весит ~1 МБ, а занимает ОЗУ начиная от ~2 МБ и доходит до ~4 МБ.
Приложение написано не на C#, а на чем-то другом, возможно Delphi или Lazarus. Объясните почему так и как это исправить? Из-за чего так происходит и возможно на чем тогда писать (какой язык), чтобы было ООП (GUI, IDE).
Отслеживать
задан 24 мар 2018 в 15:14
user287413 user287413
3 6 6 бронзовых знаков
13 мегабайт? Это практически 0. Очень хорошо, у вас реально нетребовательная к ресурсам программа.
24 мар 2018 в 16:10
КАК ОПТИМИЗИРОВАТЬ ОПЕРАТИВНУЮ ПАМЯТЬ/RAM/ОЗУ/ОПЕРАТИВКУ ДЛЯ ИГР | ПОВЫШЕНИЕ ФПС В ИГРАХ 2020
Помоему ответ прост: приложение на C# загружает в процесс библиотеки CLR, а приложение на Delphi — нет. Используйте любой отладчик, чтобы посмотреть, какие библиотеки загружает приложение, тогда все станет ясно.
24 мар 2018 в 16:38
Да, я знаю что цифры ерунда, ну просто для такого легкого приложения должно мало ресов брать, я привел похожие программы, но там функционал ого-го, особенно который на c#. Также если сравнивать с другими программами, они тоже мало потребляют (к примеру возьмем aida64, это так к примеру), также launcher игр там используется графика (физуальные эффекты), функционал и берет оно мало
24 мар 2018 в 17:05
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
- Приведенные вами цифры не являются существенными ни для современных систем, ни для систем 10-15 летней давности (для PC разумеется). Панику нужно поднимать когда потребление ресурсов постоянно и необоснованно растет — это явный признак проблем в коде. В противном случае все это преждевременные оптимизации.
- Размер файлов приложения на диске ни как не связан с используемой оперативной памятью. Причин для этого много: приложение может и использует ресурсы операционной системы, которые уже находятся в памяти; в процессе работы приложение может генерировать данные, на которые будет выделяться дополнительная память в процессе работы; дополнительный расход памяти может быть связан с особенностями конкретной среды исполнения вашего приложения.
- Любой удобный для человека язык добавляет накладные расходы на потребляемые ресурсы. Это неизбежная цена за комфорт как разработки, так и дальнейшего использования. Хотите минимизировать использование ресурсов вашим приложением — откажитесь от графических рюшечек, пишите на ассемблере с использованием максимально доступных оптимизаций компилятора. Может и получится круто, но затраты времени и необходимый уровень знаний выйдут на околоземную орбиту, а полезность для конечного пользователя будет все еще под большим вопросом. Когда выбираете на чем писать — выбирайте исходя из наличия и возможностей стандартных (или широко известных) библиотек и фреймворков, а также уровня ваших знаний, универсального правильного на 100% варианта не существует.
Ну и последнее. Оценивайте используемые ресурсы после компиляции в режиме Release и запуске без VisualStudio. В Debug -режиме не используются некоторые оптимизации компилятора и студия имеет привычку вмешиваться в процесс работы приложения для обеспечения возможностей отладки, поэтому приложение всегда потребляет больше, чем ему на самом делен нужно.
УСКОРЯЕМ RAM (ОЗУ) ДО ПРЕДЕЛА | Windows 10 | Windows 7
Отслеживать
ответ дан 24 мар 2018 в 16:00
16.2k 3 3 золотых знака 28 28 серебряных знаков 76 76 бронзовых знаков
Да, я знаю что цифры ерунда, ну просто для такого легкого приложения должно мало ресов, я привел похожие программы, но там функционал ого-го, особенно который на c#. Также если сравнивать с другими программами, они тоже мало потребляют (к примеру возьмем aida64, это так к примеру), также launcher игр там используется графика (физуальные эффекты), функционал и берет оно мало. Насчет, запуска, я запускал го без студии, но DEBUG , щас попробовал RELEASE, там какое-то окошко выскочило и я нажал «только мой код», теперь это окошечко не выскакивает, я правильно нажал? а то там было с отладкой еще
24 мар 2018 в 17:34
24 мар 2018 в 17:44
CLR (Common Language Runtime) при старте выделяет с запасом пул памяти вашему приложению. Благодаря этому, память в дальнейшем выделяется очень быстро под ваши объекты.
Если очень хочется, можно отобрать у приложения лишнюю непотребляемую в данный момент память.
Для этого можно использовать WinAPI-функцию SetProcessWorkingSetSize
using System.Diagnostics; using System.Runtime.InteropServices; // Объявляем её [DllImport(«kernel32.dll»)] static extern bool SetProcessWorkingSetSize(IntPtr hProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize); // Вызываем в том месте, где хотим уменьшить потребление памяти. // Например, сразу после старта приложения. SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);
Естественно, когда программе понадобится больше памяти, она опять будет выделена.
Однако, это всё бессмысленные действия. Позвольте системе самой определять, сколько памяти нужно.
Дополню. Много памяти выделяется для того, чтобы приложение работало быстрее. При этом остальные приложения и система в целом не страдают: как только им станет не хватать памяти, ОС отнимет излишки у вашего приложения. А когда вы сами ограничиваете своё приложение в памяти, вы ухудшаете его производительность.
Это распространённый приём программирования: размен памяти на производительность.
Источник: ru.stackoverflow.com
Эксперимент: сколько памяти реально «жрут» разные браузеры
Поставили точку в этом вопросе, а заодно развенчали миф о гигантских аппетитах Chrome.
Если у вас не самый мощный компьютер со скромным объемом оперативной памяти, даже банальный браузер может вызвать заметные подвисания. Каждая открытая вкладка «отъедает» кусок оперативки, и, когда свободной памяти остается совсем мало, компьютер, говоря простым языком, начинает «тормозить».
Есть мнение, некоторые браузеры потребляют очень много ОЗУ, а другие в этом плане более экономичны. Мы решили проверить это опытным путем: сравнили самые популярные интернет-обозреватели и делимся с вами результатами.
Методика тестирования
В список тестируемых программ попали: Google Chrome, Yandex Browser, Microsoft Edge, Opera GX и Firefox. В каждом браузере мы открыли 5 одинаковых вкладок: главные страницы VK, Instagram, Youtube, Twitch и «Авито». Какие либо плагины и расширения дополнительно не устанавливались. В качестве операционной системы была выбрана Windows 10 с последними обновлениями.
В простое ОС вместе с самым базовым набором программ (Afterburner для мониторинга, Joxi для создания скриншотов и GeForce Experience в качестве драйвера для видеокарты) потребляла около 3,2 Гбайт оперативной памяти. Всего в компьютере было установлено 32 Гбайт ОЗУ.
Google Chrome
Начнем с утилиты, которая долгое время удерживала пальму первенства среди самых прожорливых программ. Судя по всему, мемы про ненасытное детище Google окончательно остались в прошлом, потому что программа съела чуть больше гигабайта. Датчики плясали вокруг отметки в 4,3 Гбайт.
Функция предзагрузки страниц сейчас используется по умолчанию практически в любом браузере (то есть страница загружается сразу, как вы ее открыли, а не когда вы на нее перешли), поэтому Chrome на фоне остальных не выделяется. И хоть эта технология требует больше оперативной памяти, она делает пользование браузером намного комфортнее.
Opera GX
Вероятно, в программном обеспечении, созданном специально для геймеров, должна быть по умолчанию включена функция оптимизации потребления системных ресурсов? Видимо, нет, поскольку Opera потребляет примерно столько же памяти, сколько Chrome. Разница составляет несколько десятков мегабайт, что по нынешним временам просто несущественно.
Однако, здесь можно обнаружить очень удобную функцию под названием GX Control, которая позволяет выделить фиксированный объем оперативной памяти под нужды браузера. То же самое легко сделать и с ресурсами процессора. А Hot Tab Killer покажет, сколько ресурсов потребляет каждая из открытых вкладок.
Yandex Browser
К нашему удивлению, детище отечественных разработчиков потребовало больше ресурсов, чем тот же Chrome. На пару с системой они откусили 4,5 Гбайт оперативной памяти. Правда, данная утилита ранее пользовалась на этом ПК регулярно. Возможно, удаление плагинов и очистка всей истории не откатили браузер до заводского аппетита.
Если вы являетесь пользователем данного обозревателя, а оперативной памяти немного, попробуйте в настройках включить функцию выгрузки неиспользуемых вкладок из памяти. Также можно оптимизировать изображения на сайтах.