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:
- Этому процессу назначается HIGH (запись
GAMEв журнале). - Всем остальным процессам назначается IDLE с сохранением исходных приоритетов.
- В журнал добавляется запись
GAME MODE ON.
Когда все такие процессы завершаются:
- Всем процессам, приоритет которых был снижен в игровом режиме, возвращается исходный приоритет (запись
RESTOREв журнале). - В журнал добавляется запись
GAME MODE OFF. - Возобновляется обычный режим, и приоритеты пересчитываются по правилам
-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.