В этой статье поговорим про то, как увидеть настоящий размер OsEngine в памяти.
Зачем это понадобилось и как включить этот режим, поговорим в этой статье.
Результаты использования данной функции позволяют уменьшить формально занимаемую OsEngine память от 3 до 30 раз:

1 .NET 9 забирает свободную на ПК память и не отдаёт системе без насилия.
Около месяца назад наш проект OsEngine переехал на более свежий движок от Microsoft, который называется .NET 9. ССЫЛКА: https://o-s-a.net/posts/engine-update-for-osengine.html
В .NET 9 всё прекрасно, и мы получили ускорение производительности в половину!
Меж тем, особенностью этого движка является то, что он не освобождает до нуля неиспользуемую им память, а стремится накапливать, из-за чего даже самые легковесные программы в итоге занимают места в 10 раз больше, чем им положено, в том числе и OsEngine.
Почитать про это можно здесь: https://habr.com/ru/articles/754248/
Зачем это делает Microsoft, мы не знаем. То ли это разгильдяйство, то ли последствия наводнения Калифорнии тяжёлыми наркотиками, то ли не дошли руки.
Это страшный баг системы, но они от чего-то считают, что это норма. Резервируют по 500 мегабайт пустой памяти под программу, которая занимает 70 мегабайт на самом деле.
2. В первые недели перехода на .NET мы получили десятки негативных отзывов.
И это понятно. На старом движке было 70 мегабайт занято, а на новом 700 мегабайт или даже полтора гигабайта.
Все, кто это писал – правы, и так быть не должно. Я сам шокирован поведением современных программ на движке .NET. И в этом смысле – это деградация.
3. Единственный сейчас способ заставить движок отдать свободную!!! память – забить её другим процессом.
Можно об этом почитать здесь: https://habr.com/ru/articles/754248/
На этом и основан наш модуль силового освобождения памяти:
1. Создаётся программа, забивающая оперативную память.
2. .NET 9 освобождает свободную память, которую захватил «навырост».
3. Профит – мы видим настоящую память, которую занимает OsEngine.
4. Включение силового освобождения памяти в OsEngine.
Идём в настройки главного меню:

Во всплывающем меню «Очистка памяти» выбираем режим:

1. Disable – выключено.
2. At5Minutes – очистка раз в 5 минут.
3. At30Minutes – очистка раз в 30 минут.
ВАЖНО!!!
Модуль работает только в режиме боевых торгов. Когда вы включаете Роботы / Роботы Light
ВАЖНО2!!!
Если Вы используете удалённый сервер, убедитесь, что у Вас включен файл подкачки, иначе у Вас может «Упасть» сервер, т.к. вся оперативная память будет занята.
Как включить файл подкачки: https://o-s-a.net/posts/pagging-file-size-and-processor-priority.html
5. В заключении.
Первое. Этот способ довольно агрессивный и тратит ресурсы ПК и не должен Вами использоваться в постоянном режиме. Включили – убедились, что OsEngine по-прежнему как калькулятор на самом деле => перекрестились => поругали Microsoft => отключили.
Второе. С выключенной функцией. Помните: то, что Вы видите в Диспетчере задач – на 90% состоит из свободной памяти, которая будет освобождена, если включить другие программы.
Третье. Мы продолжим эксперименты по более мягкому отъёму свободной памяти у движка.
Четвёртое. Возможно проблема решиться сама с обновлением движка .NET. Скоро уже выходит 10 версия, а потом и 11. В какой-то момент Microsoft этот баг поправят и разрешат отдать свободную память в программе назад в систему. Если и когда это случится, про это выйдет отдельная статья.
Удачных алгоритмов!
Поддержка OsEngine: https://t.me/osengine_official_support
Комментарии