PotPlayer x64 1.7.22777 启动变慢排查记录:问题落在 PotPlayer64.dll 早期初始化

最近给 PotPlayer 重装并补了 LAV Filters + madVR 之后,发现新装的 PotPlayer 每次启动都明显变慢,主窗口要等大约 9 秒才出现;而本地备份的旧安装几乎是秒开。

这篇帖子记录一下问题本身、排错过程、最后定位到的根因,以及实际可行的修复办法。

现象

  • 当前新装的 PotPlayer x64:冷启动到主窗口可见大约 9.2s9.6s
  • 本地备份的旧安装:冷启动大约 0.65s0.85s
  • 直觉上最先怀疑的是 LAV / madVR / 播放列表 / 联网检查 / 代理,但最后这些都不是主因

先排除的方向

我先把常见外部因素都做了一遍隔离测试:

  • 清空或移除 PotPlayer 用户配置
  • 清空默认播放列表
  • 关闭自动更新和浏览器相关选项
  • 临时阻断 PotPlayer 对外联网
  • 检查代理连接
  • 验证 LAV Splitter / LAV Video / LAV Audio / madVR 是否只是播放链路问题

这些操作对启动时间几乎没有实质改善,说明慢点不在这些配置层。

关键发现

后面把新安装和本地备份逐项对比,发现真正不同的并不是 PotPlayerMini64.exe,而是核心 DLL:

  • 当前安装:PotPlayer64.dll 1.7.22777.0
  • 备份安装:PotPlayer64.dll 1.7.22775.0
  • PotPlayerMini64.exe 两边哈希一致
  • PotPlayer64.dll 两边哈希不同
  • 两个 DLL 都带 Kakao 官方签名

也就是说,备份并不是奇怪的第三方改包,依然是官方文件,只是核心 DLL 小版本不同。

最关键的隔离测试

我做了一个非常直接的 A/B 测试:

  1. 保持同一套安装目录、同一套配置不动
  2. 先测当前 22777 的启动
  3. 只替换 PotPlayer64.dll
  4. 再测一次
  5. 最后把 22777 换回去再测一次

结果非常干净:

  • 基线 227779510 ms
  • 仅替换成 22775771 ms
  • 再换回 227779626 ms

这基本把问题钉死到了 PotPlayer64.dll 1.7.22777.0 本身,而不是别的环境因素。

更细一点的定位

为了弄清楚“慢在 DLL 里哪里”,我又做了启动期的线程采样和时序对比。

观察到的现象是:

  • 旧版大约 0.65s 就把主窗口拉起来了,之后才开始去连本地代理
  • 新版大约 9.17s 才出现主窗口,而且联网发生在窗口出来之后
  • 所以它不是“先卡网络”,而是“窗口出现之前就在自己进程里耗掉了大约 8 秒”

再看热线程采样:

  • 慢版启动期间,主耗时线程长时间停在 PotPlayer64.dll + 0x1C1F2AE
  • 这个偏移位于 PE 里的 .themida 区段
  • 快版只是在受保护区很快掠过,随后就进入正常 GUI 初始化

从证据上看,更像是 1.7.22777 的 x64 核心 DLL 在早期保护/初始化阶段发生了启动性能回归,而不是播放器功能配置本身的问题。

这里强调一下:这是基于实测和采样得出的工程判断,不是拿到源码后的“绝对确定结论”。但证据已经足够强,至少可以确定不是 LAVmadVR、播放列表或联网设置的锅。

实际修复办法

对本机来说,最稳的办法不是硬改闭源 DLL,而是直接把当前安装里的 PotPlayer64.dll 固定回官方签名的 1.7.22775.0

这样做之后,当前机器上的启动复测大约是:

  • 851 ms
  • 814 ms
  • 815 ms

也就是基本恢复到“秒开”的状态。

对外反馈

顺手把这次排查整理成了公开材料,并且已经用韩英双语邮件发给 Kakao 的多个公开联系地址,希望能转到 PotPlayer x64 开发或发布链路去看。

公开材料:

结论

这次问题的核心不是“我把 PotPlayer 配坏了”,而是:

  • PotPlayer64.dll 1.7.22777.0 本身存在启动回归
  • 回退到 1.7.22775.0 可以稳定恢复启动速度
  • LAV Filters + madVR 不是主因

如果后面 Kakao 真的修掉了这个回归,我会再补一次更新。