Codync
무료 오픈소스 1:1 대안, Grok Bot과 Muse 대신
Оверлей CPU/GPU/ОЗУ и памяти Gradle/Kotlin для Android-разработки на Windows, с историей и статистикой.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Маленький оверлей поверх всех окон: загрузка и температура CPU/GPU, ОЗУ, видеопамять,
память Android Studio и Java-процессов. Обновление раз в секунду. Без рамки, без панели задач,
без Alt+Tab. Плюс история по минутам и статистика за день и неделю — видно, сколько на самом деле
съедают Gradle и Kotlin-демоны при заданном -Xmx.
Актуальная версия — на странице Releases, что изменилось — в истории версий.
| Сегодня | Неделя |
|---|---|
Модель процессора и видеокарты определяется сама; пороги цвета температуры берутся из справочника
hardware.csv (144 модели Intel, AMD и NVIDIA за последние 5 лет).
Скачай DevMonitorSetup.exe (~5 МБ) со страницы последней версии,
запусти и подтверди окно UAC.
Проверь папку установки (по умолчанию C:\Program Files\DevMonitor) и галочки:
winget install namazso.PawnIO); уже стоит — галочка неактивна;При обновлении галочки показывают текущее состояние: ярлык — если он есть на рабочем столе, автозапуск —
если включён; галочка драйвера PawnIO снята — поставь её, если драйвер нужен. Снятая галочка ярлыка удаляет
DevMonitor.lnk с рабочего стола, если он там есть.
Нажми «Установить». Программа запустится, в трее появится значок-термометр.
Программа лежит в папке установки (менять её может только администратор: DevMonitor работает с
правами, поэтому exe не должен лежать там, где его перезапишет обычная программа). История,
настройки и позиция окна — в %LOCALAPPDATA%\DevMonitor (data\, settings.txt, position.txt, журнал log.txt — трей → «Журнал»).
Ставится только то, что нужно для работы: программа, lib\, справочник hardware.csv, README,
история версий, лицензии и установщик драйвера PawnIO. Журнал установки — %TEMP%\DevMonitor-setup.log: выбранные
параметры, результат каждого шага и причина неудачи.
В установщике есть галочка «Отправлять автору отчёты о сбоях», по умолчанию она выключена.
%LOCALAPPDATA%\DevMonitor\log.txt: имя пользователя и домена (или компьютера) Windows, пути к программе
и её данным, выбранные процессор и видеокарта, состояние датчиков, проверки, загрузки и запуск обновлений с путём к
скачанному файлу. История показателей и файл настроек не отправляются. Сервер записывает IP-адрес, с которого
пришёл отчёт.https://aokazantsev.ru/pets/devmonitor/crash-report, сервер в России. Отчёты видит только автор,
хранятся последние 50 МБ — при поступлении новых самые старые удаляются. Подробности — в
политике обработки данных.В установщике есть галочка «Отправлять автору анонимную статистику использования», по умолчанию она включена: по статистике автор видит, сколько людей пользуется программой и какие функции нужны, а какие нет. Выключить можно в установщике или в любой момент в «Настройках…».
%LOCALAPPDATA%\DevMonitor\usage-id.txt), версия программы и Windows, сколько раз за сутки программа запускалась и
сама находила новую версию, сколько раз использовались пункты меню трея, клик по значку, перетаскивание и меню оверлея, вкладки, кнопки и графики статистики, настройки, проверка
и установка обновления, и текущее состояние: включены ли автозапуск, проверка обновлений и отчёты о сбоях, запущена
ли программа с правами администратора, показан ли оверлей, выбрано ли железо вручную, нашлись ли процессор и
видеокарта в справочнике, читаются ли температура процессора и видеокарта. Имена пользователя и компьютера, пути,
модели железа, показатели и история в статистику не попадают.https://aokazantsev.ru/pets/devmonitor/usage, сервер в России. IP-адрес сервер в статистике не хранит.
Статистика хранится 400 суток, дальше — только итоги по дням без номеров установок. Подробности — в
политике обработки данных.%LOCALAPPDATA%\DevMonitor\usage-statistics.txt
(on — статистика отправляется, off или нет файла — нет).Раз в сутки, пока программа запущена, DevMonitor сам проверяет, вышла ли новая версия. Вышла — появляется
уведомление «Вышла версия X. Нажми, чтобы скачать и установить.», клик по нему открывает окно обновления. Нет новой
версии или проверка не удалась — ничего не показывается, строка уходит в журнал. Выключается галочкой «Раз в сутки
проверять обновление и сообщать о новой версии» в «Настройках…» (отметка — файл
%LOCALAPPDATA%\DevMonitor\update-check-off.txt).
Проверить вручную — трей → «Проверить обновление…». Есть версия новее — установщик скачивается в отдельную папку в «Загрузках»
(DevMonitor-<версия>) и сверяется с контрольной суммой SHA-256, которую GitHub публикует для файла релиза;
не совпала — файл удаляется. Если GitHub не опубликовал сумму, окно так и скажет: файл не сверен. Кнопка
«Установить сейчас» запускает установщик (если DevMonitor запущен без прав, Windows спросит права
администратора), в нём нажми «Установить»: новая версия встанет поверх текущей, удалять старую не нужно,
настройки и история сохранятся. Путь к файлу и кнопка «Открыть папку» остаются в окне. Если сбой вызван
настройками, в установщике есть галочка «Сбросить настройки».
«Параметры → Приложения → DevMonitor → Удалить» или Uninstall.exe в папке программы. Программа
закрывается сама; удаляются программа, история и настройки, ярлык, автозапуск и запись в
«Приложениях». Драйвер PawnIO остаётся — это отдельная программа, удаляется там же в «Приложениях».
Из папки программы удаляются только файлы DevMonitor (подпапки lib и installer — целиком); если рядом
лежит что-то своё, оно остаётся вместе с папкой.
DevMonitorSetup.exe из папки, где нет посторонних
файлов; «Проверить обновление…» для этого кладёт установщик в отдельную папку.settings.txt не читается. Файл занят — программа ждёт до
~30 с; нет доступа или так и не освободился — пишет причину в журнал, показывает окно и закрывается.DevMonitor на рабочем столе → «Да» в окне UAC.Автозапуск включается галочкой «Запускать при входе в Windows» в установщике (при первой установке стоит, при
обновлении — как сейчас), потом переключается в трее тем же пунктом. Это задача Планировщика заданий
«DevMonitor»: при входе пользователя, с наивысшими правами (температура CPU есть, окна UAC при входе нет),
через 20 с после входа, запускается и от батареи, без ограничения времени работы, вторую копию не запускает.
Папка «Автозагрузка» и ключ Run не годятся: они не поднимают права. DevMonitor, запущенный с ярлыка, создаёт
задачу без UAC; запущенный без прав — попросит UAC один раз. Удаление DevMonitor убирает и задачу. Код —
src/Autostart.cs.
Трей. Пока DevMonitor запущен, в области уведомлений всегда висит значок-термометр.
Одиночный клик левой кнопкой — свернуть оверлей в трей или развернуть обратно.
Правая кнопка — меню: «Свернуть в трей» / «Развернуть», «Статистика…»; «Настройки…», «Журнал», «Запускать при входе в Windows», «Проверить обновление…», «О приложении…»; «Выход». Правый клик по самому оверлею открывает то же меню.
Подсказка на значке — первая строка каждой группы (CPU, GPU, Studio) текущими значениями. Строка без значения (например, Studio, когда Android Studio закрыта) в подсказку не попадает.
Свёрнутый оверлей не рисуется, но данные собираются и пишутся в историю как обычно.
Windows 11 прячет новые значки под стрелку «^». Чтобы значок был виден всегда: Параметры → Персонализация → Панель задач → Другие значки в области уведомлений → DevMonitor.
Перетащить оверлей — зажать левую кнопку мыши на окне. Позиция запоминается в position.txt.
Правый клик по оверлею — то же меню, что у значка в трее.
Повторный запуск второй копии не создаёт. Поэтому, если DevMonitor уже запущен без прав
(через DevMonitor.exe напрямую или build.cmd), ярлык ничего не сделает, а температура CPU
останется —°: сначала «Выход», потом ярлык.
| Группа | Строка | Источник |
|---|---|---|
| 1 | CPU — загрузка % · температура | GetSystemTimes (как «% Processor Time»); температура — LibreHardwareMonitor, см. ниже |
| 1 | ОЗУ — % · занято / всего | GlobalMemoryStatusEx |
| 2 | GPU — загрузка % · температура | NVML (nvml.dll из драйвера NVIDIA), без прав администратора |
| 2 | VRAM — % · занято / всего | NVML |
| 3 | Studio — память studio64.exe | список процессов, раз в 3 с |
| 3 | Gradle — число Gradle-демонов · их память | java.exe с GradleDaemon в командной строке |
| 3 | Kotlin — число Kotlin-демонов · их память | java.exe с KotlinCompileDaemon |
| 3 | Воркеры — остальные java.exe · их память | воркеры тестов, клиент gradlew, прочие JVM |
Командная строка java.exe читается напрямую (NtQueryInformationProcess, без WMI) один раз на
процесс и кэшируется по PID. Больше одного Gradle-демона — счётчик янтарный: скорее всего висит
демон от старой сборки или другой JDK. Воркеры живут только во время сборки: не пропадают после
неё — сборка ещё идёт или зависла.
Ноутбук на батарее. Пока питание от батареи, видеокарта не опрашивается вовсе: на ноутбуках с
переключаемой графикой ежесекундный опрос не даёт дискретной карте уснуть и сажает батарею. Строка
GPU показывает «пауза: батарея», VRAM — «—», в историю по GPU на это время ничего не пишется
(на графиках разрыв). Подключил зарядку — опрос возобновляется со следующей секунды. CPU, ОЗУ и
процессы читаются как обычно. Источник питания — src/PowerSource.cs, решение — src/MetricsCollector.cs.
Загрузка и температура красятся независимо: 99 % загрузки не делает температуру красной.
| Значение | Янтарный | Красный |
|---|---|---|
| Загрузка CPU / GPU, ОЗУ, VRAM | от 75 % | от 90 % |
| Температура CPU и GPU | по выбранной модели | по выбранной модели |
Пороги загрузки — src/MetricRowsFormatter.cs. Пороги температуры — из справочника железа, см. ниже.
Справочник — hardware.csv рядом с exe, по строке на модель:
тип;модель;янтарный от;красный от;откуда цифры. Сейчас 144 модели за последние 5 лет:
Правила порогов:
auto;auto: при запуске DevMonitor спрашивает у драйвера «Max Operating Temp» и
«Target Temperature» этого ноутбука и считает по тому же правилу (целевая вместо 83). Драйвер не
ответил — пороги по умолчанию 83/87. На RTX 3070 драйвер отдаёт 93 и 83 — ровно как в спецификации.Все пределы сверены с сайтами производителей 24.09.2026: Intel ARK (через intel.cn — intel.com из РФ не открывается), amd.com, nvidia.com. Мобильные Intel: 12–14 H/HX — 100 °C, Core Ultra H (серии 1 и 2) — 110 °C, 200HX — 105 °C, 200V — 100 °C. Поправлены i9-12900KS (90 °C, не 100) и RTX 50 (у каждой модели свой максимум: 5050 — 87, 5060 — 89, 5060 Ti — 87, 5070 — 85, 5070 Ti и 5080 — 88, 5090 — 90).
В справочнике только поддерживаемое. CPU — проверено по исходникам: LibreHardwareMonitor 0.9.6
(IntelCpu.cs) создаёт датчики температуры только для известных ему моделей CPUID — Alder, Raptor,
Meteor, Arrow (кроме Arrow Lake-U) и Lunar Lake, у AMD — Zen 3/4/5; модуль PawnIO IntelMSR моделей
не ограничивает и разрешает читать регистры температуры (0x19C, 0x1B1, 0x1A2). Core Ultra 200U
(Arrow Lake-U) LHM не распознаёт — их в списке нет. GPU — только NVIDIA, температура из драйвера
NVIDIA; AMD Radeon и Intel Arc DevMonitor не читает.
Настройки — трей → «Настройки»: два списка (процессор, видеокарта), под каждым — пороги
выбранной модели и что Windows видит в этом ПК; ниже галочки «Раз в сутки проверять обновление и сообщать о новой
версии» и «Отправлять автору анонимную статистику использования». «Сохранить» пишет settings.txt
(cpu=…, gpu=…), только если выбор в списках изменился или settings.txt при открытии окна не прочитался —
тогда окно называет причину, а «Сохранить» записывает модели из списков (модель, которой нет в справочнике,
показывается пустой строкой — записать можно только явно выбранные процессор и видеокарту; справочника нет — железо
не записывается, окно говорит об этом), а галочки — файлами в %LOCALAPPDATA%\DevMonitor:
update-check-off.txt (есть файл — проверка выключена) и usage-statistics.txt (on — статистика отправляется,
off или нет файла — нет); галочки действуют сразу и сохраняются, даже если справочник железа пуст. Выбор читается только при запуске — новый вступает в силу после
перезапуска (трей → «Выход», затем ярлык). Меняются только цвета температуры на оверлее и
пунктиры зон на графиках; история и остальное не затрагиваются. Нет settings.txt — модель берётся
та, что Windows видит в этом ПК (src/HardwareMatcher.cs сопоставляет её со справочником); модели нет
в справочнике — пороги по умолчанию (CPU 85/95, GPU 83/87).
Запись. Каждую секунду значения копятся в памяти, раз в минуту на диск дописывается одна
строка — среднее и максимум за эту минуту. Файл на день: %LOCALAPPDATA%\DevMonitor\data\ГГГГ-ММ-ДД.csv
(~1440 строк, ~150 КБ). Пишется только пока DevMonitor запущен; при «Выходе» дописывается
незаконченная минута. Колонки: time, затем <показатель>_avg, <показатель>_max для
cpu_load, cpu_temp, gpu_load, gpu_temp, ram, vram, jvm_gb (Gradle + Kotlin + воркеры),
gradle_gb, kotlin_gb, workers_gb (то же по отдельности: видно, сколько реально занимает каждый
демон при заданном -Xmx). Нет значения (например, температура CPU без прав) — пустая ячейка.
Файл читается по заголовку, а не по номеру колонки: файлы с прежним набором колонок читаются, недостающие показатели в них пустые. Если заголовок сегодняшнего файла не совпадает с текущим, при первой записи файл переписывается под новый заголовок, старые значения сохраняются.
Очистка. Только при запуске. Хранится текущая (неполная) неделя и две предыдущие полные —
от 15 до 21 дня: всё раньше понедельника позапрошлой недели удаляется
(HistoryStore.RetainedFullWeeks).
Окно. Значок в трее → правая кнопка → «Статистика» — отдельное окно (повторный вызов поднимает уже открытое). Две вкладки:
Оси графиков — обе в едином масштабе на всю хранимую историю, поэтому любые два графика сравниваются на глаз.
Окно и максимумы считаются один раз при первом открытии статистики и дальше обновляются каждую минуту вместе с записью.
На графике дня («Сегодня» и день из недели) линия среднего — цвета дня недели, линия максимума — тот же цвет, осветлённый на 55 %. Точечная — среднее за период, пунктиры на температурах — янтарная и красная зоны (если попадают в масштаб).
Windows не отдаёт температуру CPU обычным программам: датчик читается только драйвером ядра.
Без него в строке CPU стоит —°. Нужны три вещи:
Библиотека — lib\: LibreHardwareMonitorLib 0.9.6 (MPL-2.0, NuGet, сборка net472 x64)
и её зависимости. Уже лежит. Нет папки — программа работает без температуры CPU.
Драйвер PawnIO — через него LibreHardwareMonitor с версии 0.9.5 читает датчики (старый WinRing0 убран, на него ругался Defender). Ставится один раз:
winget install namazso.PawnIO
Права администратора — без них драйвер недоступен. Ярлык на рабочем столе помечен «Запуск от имени администратора». Автозапуск без окна UAC — задача Планировщика, её создают галочка установщика и пункт трея «Запускать при входе в Windows» (папка «Автозагрузка» права не повышает).
Датчик берётся по приоритету: CPU Package → Core Max → Core Average
(src/CpuTemperatureSensor.cs). Обновить библиотеку — заменить содержимое lib\ DLL-ками
из пакетов NuGet (runtimes/win-x64/lib/net472 или lib/net4xx).
Журнал — %LOCALAPPDATA%\DevMonitor\log.txt (трей → «Журнал», при 512 КБ переезжает в
log.old.txt): запуск, выбранное железо, как запустился каждый датчик и почему не запустился,
медленные опросы датчиков, ошибки чтения и записи настроек, проверки, загрузки и запуск обновлений, выход
программы, текст ошибки при падении. В журнале есть имя пользователя и домена (или компьютера) Windows и пути к
программе, её данным и скачанному обновлению.
Температура CPU читается через драйвер ядра, видеокарта — через nvml.dll драйвера NVIDIA. Сбой в
них не должен ронять оверлей:
—, а в меню трея появляется причина;Замер с температурой CPU и записью истории: ~0,5 с процессорного времени за минуту (≈0,04 % CPU), ~54 МБ private (рантайм .NET и WinForms). Что для этого сделано:
GetSystemTimes вместо PerformanceCounter (тот читает всю категорию счётчиков).DevMonitor.exe.config), лишнего потока нет.Нужен только .NET Framework 4.8 (есть в любой Windows 10/11), SDK не требуется.
build.cmd — программа (DevMonitor.exe).build-installer.cmd — программа, Uninstall.exe, архив installer\obj\payload.zip (состав —
installer\payload.txt) и установщик dist\DevMonitorSetup.exe. Установщик драйвера PawnIO в git
не хранится: скрипт installer\fetch-pawnio.ps1 скачивает его с GitHub (namazso/PawnIO.Setup) и
сверяет SHA-256.docs\*.png. Поменял интерфейс — переснять.CLAUDE.md: правила сборки, проверки и грабли.build.cmd
Скрипт компилирует src\*.cs штатным csc.exe (C# 5 — без $"...", ?., nameof), кладёт
DevMonitor.exe и .config рядом и запускает. Установленную копию он не трогает; если занят exe
в папке сборки — переименовывает его в DevMonitor.old.exe.
build.cmd nostart — только собрать.
| Хочу | Файл |
|---|---|
| Состав строк и групп, формат, пороги | src/MetricRowsFormatter.cs (GroupSizes должен совпадать с группами в Format) |
| Цвета, размеры, шрифт, скругление, отступы | константы в начале src/OverlayForm.cs |
| Меню трея, клик по значку, подсказка | ConfigureTrayIcon, BuildMenu, UpdateTrayText в src/OverlayForm.cs |
| Частоту обновления | RefreshIntervalMs в src/OverlayForm.cs |
| Как часто опрашиваются процессы | ProcessRefreshTicks в src/MetricsCollector.cs |
Как делятся java.exe на Gradle / Kotlin / воркеры | src/JavaProcessClassifier.cs |
| Пороги температуры, новая модель железа | hardware.csv (выбор — трей → «Настройки»); auto;auto — пороги из драйвера NVIDIA (src/DriverZones.cs) |
| Установщик: тексты, галочки, шаги | installer\setup\SetupProfile.cs; окно и общий сценарий — SetupForm.cs, Installation.cs (общие для всех pet-проектов) |
| Удаление | installer\uninstall\UninstallProfile.cs; общий сценарий — UninstallProgram.cs, ярлык и запись в «Приложениях» — installer\common\ |
| Окно настроек | src/SettingsForm.cs; чтение справочника — src/HardwareCatalog.cs, выбор при запуске — src/ActiveHardware.cs |
| Что пишется в историю | src/MetricKind.cs + src/MetricCatalog.cs + src/MetricSampler.cs; новый показатель — в конец MetricKind и MetricCatalog.All (порядок совпадает с индексами); старые файлы читаются по заголовку, data\ удалять не нужно |
| Срок хранения истории | RetainedFullWeeks в src/HistoryStore.cs |
| Окно статистики: вкладки, таблицы | src/StatisticsForm.cs, src/TodayView.cs, src/WeekView.cs, стиль — |
Светлая подложка почти непрозрачная (альфа 232 из 255), текст тёмный. Полупрозрачный фон с белым текстом не читается на светлых окнах: контраст зависит от того, что под окном. При непрозрачности ~90 % тёмный текст держит контраст выше 4,5:1 (порог WCAG AA) на любом фоне под окном.
| Роль | Цвет |
|---|---|
| Фон | #F6F8FB, альфа 232 |
| Подпись | #475569 |
| Значение | #0F172A |
| Предупреждение | #92400E |
| Критично | #B91C1C |
| Разделитель / рамка | #0F172A, альфа 36 / 40 |
Термометр, src/app.ico (16–256 px), вшивается в exe при сборке (/win32icon), ярлык берёт её
из exe. Перерисовать — поправить src/make_icon.py (Pillow) и запустить, затем build.cmd.
Окно — layered window (UpdateLayeredWindow): картинка с альфа-каналом рисуется в битмап и
отдаётся системе целиком, поэтому скруглённые углы и прозрачность настоящие, без TransparencyKey.
MIT — см. LICENSE. Сторонние библиотеки в lib\ и драйвер PawnIO — под своими лицензиями,
см. THIRD_PARTY_NOTICES.md.
src/StatisticsStyle.cs| График: обрезка времени, шаги, цвета | src/HistoryChart.cs; шаг масштаба — ScaleMax в src/MetricCatalog.cs |
| Новый датчик | новый класс-сенсор + поле в MetricsSnapshot + строка в MetricRowsFormatter |
| Позицию по умолчанию | src/WindowPositionStore.cs (правый верхний угол, отступ 16 px); сбросить — удалить position.txt |