Files
autoPriority/README.md
T

6.8 KiB

autoPriority

Отслеживает использование памяти процессами в Windows и автоматически управляет их приоритетом: ресурсоемким процессам назначает HIGH, а менее ресурсоемким снижает приоритет до NORMAL, только если он был выше. При превышении повышенного порога может включать игровой режим, назначая обнаруженному процессу HIGH, а всем остальным — IDLE.

Только для Windows.

Принцип работы

Обычный режим

Через заданный интервал программа проверяет все запущенные процессы:

RSS относительно -mem Текущий приоритет Действие
≥ порога любой, кроме HIGH → HIGH (запись PROMOTE в журнале)
≥ порога уже HIGH пропустить
< порога ABOVE_NORMAL, HIGH или REALTIME → NORMAL (запись DEMOTE в журнале)
< порога NORMAL, BELOW_NORMAL или IDLE пропустить

Игровой режим (-game-mem)

Когда любой процесс достигает или превышает порог -game-mem:

  1. Этому процессу назначается HIGH (запись GAME в журнале).
  2. Всем остальным процессам назначается IDLE с сохранением исходных приоритетов.
  3. В журнал добавляется запись GAME MODE ON.

Когда все такие процессы завершаются:

  1. Всем процессам, приоритет которых был снижен в игровом режиме, возвращается исходный приоритет (запись RESTORE в журнале).
  2. В журнал добавляется запись GAME MODE OFF.
  3. Возобновляется обычный режим, и приоритеты пересчитываются по правилам -mem.

Если изменить приоритет процесса невозможно, например из-за античита или системных ограничений, процесс добавляется во внутренний список исключений и больше не изменяется (запись BLOCK в журнале). Его RSS продолжает измеряться, поэтому он может включить игровой режим. Процессы, память которых прочитать не удалось, пропускаются до следующей проверки.

При штатном завершении программа несколько раз пытается восстановить приоритеты всех процессов, измененных в игровом режиме. Если Windows отклоняет восстановление, в журнал записывается предупреждение.

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

Сборка

Требуется Go 1.26 или новее.

# Обычная сборка с окном консоли
go build -o autopriority.exe .

# Фоновая сборка без консоли, минимальный размер
go build -trimpath -buildvcs=false -gcflags="all=-l" -ldflags="-H=windowsgui -s -w -buildid=" -o autopriority.exe .

Использование

autopriority [flags]
Флаг Значение по умолчанию Описание
-mem 512M Порог памяти, например 512M, 1G или 2048M
-game-mem 2G Порог игрового режима, например 2G или 4G. Должен быть больше -mem. 0 отключает режим
-interval 1 минута Интервал проверки, минимум 10 секунд
-dry-run false Только записывать решения в журнал, не менять приоритеты

Примеры:

# Порог 1 ГБ, проверка каждые 30 секунд
autopriority -mem=1G -interval=30s

# Запуск со значениями по умолчанию: порог 512M, игровой порог 2G
autopriority

# Обычный порог 512M, игровой порог 4G
autopriority -mem=512M -game-mem=4G

# Пробный запуск: записывать решения, ничего не изменяя
autopriority -dry-run

Журнал

Журнал всегда записывается в %TEMP%\autopriority.log. При каждом запуске создается новый файл, а предыдущий удаляется.

Типы записей:

Префикс Значение
PROMOTE Приоритет повышен до HIGH в обычном режиме
DEMOTE Приоритет снижен до NORMAL в обычном режиме
GAME DETECT Впервые обнаружен процесс, превысивший порог -game-mem
GAME Процессу назначен HIGH или IDLE в игровом режиме
GAME MODE ON Игровой режим включен
GAME MODE OFF Игровой режим выключен, приоритеты восстановлены
BLOCK Ошибка OpenProcess или SetPriorityClass, процесс добавлен в список исключений
SKIP Не удалось прочитать сведения о процессе, попытка повторится при следующей проверке
RESTORE Восстановлен исходный приоритет при выходе из игрового режима или завершении программы
[DRY-RUN] Приоритет был бы изменен в пробном режиме

Автозапуск

Нажмите Win+R, введите shell:startup и нажмите Enter. Поместите ярлык autopriority.exe в открывшуюся папку.

Зависимости

Отсутствуют. Программа напрямую вызывает Windows API (kernel32, psapi) через syscall.