107 lines
6.8 KiB
Markdown
107 lines
6.8 KiB
Markdown
# 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.
|