跳到主要内容
内存泄漏修复

阻止 Monosnap 内存泄漏 — 60 秒内切换

此泄漏已记录多年。它不会得到修补。Maxisnap 在空闲时使用约 50 MB 内存,并全天保持平稳。相同的 Ctrl+Alt+5 快捷键,无需重新学习。

8 小时工作日,RAM(MB)
Monosnap,第 0 小时180
Monosnap,第 2 小时295
Monosnap,第 4 小时452
Monosnap,第8小时812
Maxisnap,任何时间51

内存泄漏不是你的电脑问题

如果你一直在想是不是你的机器问题——旧驱动、Windows 11 的怪异行为、失控的 Chrome 标签页——那都不是。内存泄漏问题出在 Monosnap 内部,而且已经存在多年。搜索 r/monosnap 你会发现一个又一个帖子描述着相同的模式。

以下是幕后发生的事情。每次 Monosnap 捕获一个区域时,它都会分配一个足够大的帧缓冲区来保存原始像素数据。对于 2560 x 1440 的屏幕,这大约是 14 MB。当编辑器关闭时,这些缓冲区应该被释放回操作系统。但在 Monosnap 中,它们通常不会被释放——它们被 Electron 渲染器的堆保留,等待一个要么从不运行要么运行太晚的垃圾回收过程。在一个工作日内进行 40 次以上的捕获,这些被保留的缓冲区会累积成数百兆字节的“幻影”RAM。

解决方案是换一个不同的应用程序

Monosnap 的架构将内存泄漏与 Electron 本身绑定,修补它需要重写捕获管道。这种重写在五年内都没有发生。实际的解决方案是使用一个从一开始就没有这个问题的工具。

Maxisnap 基于 PyQt6 构建,并使用 PyInstaller 编译成一个独立的 Win32 可执行文件。没有 Chromium 进程。每次捕获都会分配一个 QImage,编辑器引用它,当窗口关闭时,引用被删除,内存立即返回给操作系统——因为 PyQt 的所有权模型和 Python 的引用计数都倾向于立即释放,而不是等待分代垃圾回收。

根据经验:Maxisnap 启动时空闲内存约为 50 MB。在连续运行 72 小时并进行常规捕获后,它仍然保持在 50 MB 左右。上面的图表来自实际日志。

60 秒内

切换步骤

  1. 0:00
    下载 Maxisnap。 前往 下载页面。一次点击,63 MB。
  2. 0:15
    退出 Monosnap。 右键点击其托盘图标,选择“退出”。看着你的 RAM 骤降 600 MB。
  3. 0:30
    运行安装程序。 默认安装路径,无需重启。
  4. 0:45
    按下 Ctrl+Alt+5。 使用你一直使用的相同快捷键进行第一次捕获。编辑器即时打开。
  5. 0:60
    完成。 如果你想上传到服务器,请在“设置”中粘贴你的 SFTP/S3 凭据。
FAQ

内存泄漏问题

我每天只截取 5 张截图。内存泄漏还会影响我吗?

影响较轻,但仍然会。即使你不进行捕获,Monosnap 也会轮询剪贴板和系统托盘,因此空闲内存仍然会增长。在低使用率下增长较慢,但从未停止。

重启应用程序有帮助吗?

暂时有帮助。退出并重新启动后,你会回到大约 180 MB。但大多数注意到内存泄漏的用户之所以遇到这个问题,是因为他们让截图工具全天运行,而多次重启与他们的期望背道而驰。

macOS 上的 Monosnap 呢?

macOS 上的内存泄漏不那么严重,因为内存模型不同,但用户仍然报告内存逐渐增长。Maxisnap 的 macOS 版本是实验性的。对于 Windows 用户,请立即切换。

你的内存会感谢你

Maxisnap 免费。安装只需 60 秒。使用你已习惯的相同快捷键。

下载 Maxisnap

相关: 为什么它会变慢 · 卡顿修复 · 通用替代方案