Почему использование оперативной памяти net core такое значительное?

Почему программа на .NET Core потребляет на Linux больше оперативной памяти, чем на Windows? Я заметил, что при запуске небольшой программы .NET в Docker под Linux Ubuntu потребление памяти составляет около 270 МБ, в то время как если запустить эту же программу на Windows, потребление памяти составит всего 11 МБ.
  • 14 декабря 2023 г. 22:56
Ответы на вопрос 2
Существует несколько причин, почему программа на .NET Core может потреблять больше оперативной памяти на Linux, чем на Windows:

1. Описание памяти. Внутренние структуры данных .NET Core, такие как сборка мусора и диспетчер памяти, могут быть описаны по-разному на разных операционных системах. Например, система сборки мусора .NET Core для Linux может использовать другой алгоритм сборки мусора, который более эффективен, но требует больше памяти для своей работы.

2. Настройки системы. По умолчанию настройки памяти для .NET Core на Linux и Windows могут отличаться. Например, размер стека потока по умолчанию на Linux может быть больше, что приводит к большему потреблению памяти.

3. Оптимизации JIT-компилятора. JIT-компилятор .NET Core может использовать различные оптимизации при генерации машинного кода для разных архитектур и операционных систем. Из-за этого на Linux может использоваться больше памяти для хранения оптимизированного кода.

4. Размеры стандартных библиотек. Возможно, на Linux используются большие версии стандартных библиотек .NET Core, которые занимают больше памяти.

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

В целом, различия в потреблении памяти между .NET Core на Linux и Windows обычно связаны с архитектурными различиями, оптимизациями и настройками системы, и могут варьироваться в зависимости от конкретных сценариев использования и настроек.
1. https://www.linuxatemyram.com/ 
2. Особенности замера.

Ну и 3:
Даже если действительно на винде эта программа жрёт 11мб, а в докер-контейнере 200мб. Что это тебе даёт?
Винда всё ещё будет отжирать минимум гиг, а линуксовое ядро будет болтаться около 100мб. И не забывай про п1 и 2
Похожие вопросы