Задать вопрос

Почему приложение на Linux потребряет в 18 раз больше памяти чем на Windows?

Сделал я небольшое приложение для фоновой работы на основе BackgroundSevice.
На Windows 10 если смотреть в диспетчере задач оно потребляет 8 мб.
На Linux (Ubuntu) если смотреть в System monitor оно потребяет 150 мб.
Как это возможно? Можно ли что-то с этим сделать. Для фонового приложения 150 мб слишком много.
Вот профили публикации приложения:
68b14d8fcf963057383917.png
68b14d97dddb0928276691.png
  • Вопрос задан
  • 19526 просмотров
Подписаться 4 Простой 9 комментариев
Решения вопроса 2
tzlom
@tzlom
это просто разница в методике подсчета.

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

получается что линукс завышает использование памяти (но если есть память объявленная линуксом то программа гарантированно запустится) , а винда занижает ( так что если памяти в притык, её может и не хватить)
Ответ написан
Комментировать
@maksd_gt
Ну когда на Винде, то все необходимое для запуска программы у тебя уже установлено(.net или что у тебя там). Оно работает как отдельная программа не связанная с твоим приложением. Когда ты запускаешь свое приложение, все эти среды выполнения библиотеки и прочее, продолжает работать отдельно и ты в своем процессе видишь только свой процесс.
В линуксе нет сред выполнения виндовс и когда ты делаешь под него сборку, то внутрь этой сборки пакуется все необходимое для запуска приложения и когда ты в линуксе это запустишь, то запускаются среды выполнения в том же процессе. Поэтому и разница.

Чтобы на Винде увидеть реальную цифру, тебе нужно взять память своего приложения(8мб) и прибавить к ней ещё библиотеки и рантайм, которые работают в отдельных программах и процессах.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
opium
@opium
Просто люблю качественно работать
Так мы напиши под Линукс нативное приложение будет тоже самое
Ответ написан
Комментировать
@ptr128
Под Windows dotnet был загружен в память ещё при старте системы. В Linux он был загружен при старте Вашего приложения. Вот на размер runtime библиотек dotnet и видите разницу. Зато последующие запущенные приложения на dotnet уже загруженные в память so грузить не будут.
Ответ написан
Комментировать
Помоему это из-за того, что все зависимости в сборке для Линукс у вас в релизе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы