Утечка не в вашем компьютере
Если вы задавались вопросом, не в вашей ли машине дело — старый драйвер, особенности Windows 11, сбежавшая вкладка Chrome — то нет. Утечка находится внутри Monosnap и существует уже много лет. Поищите r/monosnap и вы найдете множество тем, описывающих ту же проблему.
Вот что происходит под капотом. Каждый раз, когда Monosnap захватывает область, он выделяет буфер кадра, достаточно большой для хранения необработанных пиксельных данных. Для экрана 2560 x 1440 это примерно 14 МБ. Когда редактор закрывается, эти буферы должны быть возвращены операционной системе. В Monosnap они часто не возвращаются — они удерживаются кучей рендерера Electron, ожидая прохода сборщика мусора, который либо никогда не запускается, либо запускается слишком поздно. За рабочий день из 40+ захватов, удерживаемые буферы накапливаются в сотни мегабайт фантомной оперативной памяти.
Решение — другое приложение
Архитектура Monosnap связывает утечку с самим Electron, и исправление потребовало бы переписывания конвейера захвата. Этого переписывания не произошло за пять лет. Практическое решение — это инструмент, который изначально был разработан без этой проблемы.
Maxisnap построен на PyQt6 и скомпилирован с помощью PyInstaller в один исполняемый файл Win32. Нет процесса Chromium. Каждый захват выделяет QImage, редактор ссылается на него, и когда окно закрывается, ссылка отбрасывается, и память немедленно возвращается операционной системе — потому что модель владения PyQt и подсчет ссылок Python освобождают память немедленно, а не ждут сборщика мусора поколений.
Эмпирически: Maxisnap в режиме ожидания при запуске занимает около 50 МБ. После 72 часов непрерывной работы с регулярными захватами он по-прежнему занимает около 50 МБ. Диаграмма выше основана на реальных логах.
Процедура перехода
- 0:00Загрузите Maxisnap. Перейдите на страницу загрузки. Один клик, 63 МБ.
- 0:15Закройте Monosnap. Щелкните правой кнопкой мыши по его значку в трее, выберите «Выход». Наблюдайте, как ваша оперативная память уменьшится на 600 МБ.
- 0:30Запустите установщик. Путь установки по умолчанию, перезагрузка не требуется.
- 0:45Нажмите Ctrl+Alt+5. Ваш первый снимок экрана с той же горячей клавишей, которую вы всегда использовали. Редактор открывается мгновенно.
- 0:60Готово. Вставьте свои учетные данные SFTP/S3 в Настройки, если хотите загружать на сервер.
Вопросы об утечке памяти
Я делаю всего 5 скриншотов в день. Утечка все еще влияет на меня?
Менее серьезно, но да. Память в режиме ожидания все равно растет, потому что Monosnap опрашивает буфер обмена и системный трей, даже когда вы не делаете снимки. Рост медленнее при низком использовании, но никогда не прекращается.
Помогает ли перезапуск приложения?
Временно. Выйдите и перезапустите, и вы вернетесь к ~180 МБ. Но большинство пользователей, которые замечают утечку, столкнулись с ней, потому что они держат свой инструмент для скриншотов запущенным весь день, а многократный перезапуск — это противоположность тому, что они хотят.
Что насчет Monosnap на macOS?
Утечка менее серьезна на macOS, потому что модель памяти отличается, но пользователи все равно сообщают о постепенном росте. Сборка Maxisnap для macOS является экспериментальной. Для Windows переходите сегодня.
Ваша оперативная память скажет вам спасибо
Maxisnap бесплатен. Установка занимает 60 секунд. Те же горячие клавиши, которые вы уже используете.
Скачать MaxisnapПохожие статьи: почему он стал медленным · исправление зависаний · общая альтернатива