两年多前安装了Acronis True Image for Crucial用于将数据迁移到新购买的 SSD,之后一直保留未卸载“以防万一”。近期发现插拨外接显示器时Explorer.exe会消耗大量 CPU 时间,通过抓取 ETW 追踪并深入研究,找到罪魁祸首是windows.storage.dll!CFSFolder::\_GetOverlayInfo,大部分时间在tishell64\_26\_0\_39450.dll中的未知函数调用。
CPU Usage (Sampled)数据显示CFSFolder::\_GetOverlayInfo消耗大量时间,其中Process32NextW约 6.6s,CreateToolhelp32Snapshot约 3.1s。通过在Explorer.exe中设置断点发现插拨外接显示器时CreateToolhelp32Snapshot会被调用 1200 到 3000 次,即使没有打开Explorer窗口也会被调用 44 次,推测tishell64DLL 可能在获取运行进程列表,这在正常情况下很奇怪。
在 WPA 的Graph Explorer中找到tishell64DLL位于“C:\Program Files (x86)\Acronis\TrueImageHome”,由 Acronis 发布。Acronis 已意识到进程枚举问题并计划在下一版本解决,目前可通过删除注册表键“Computer\HKEY\_LOCAL\_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\AcronisDrive”(键名开头有 5 个空格)来禁用进程枚举代码,最新版本的 Acronis True Image 已修复部分tishell64相关问题,但 Crucial 版本仍存在性能问题。
运行 sysinternals’ sigcheck 发现 11 个无版本信息的 DLL,10 个出版商列为Microsoft,1 个为Acronis International GmbH,这些文件的 ETW 字段和 sigcheck 输出中也缺少很多信息,Acronis 也需要修复此缺失的元数据。
结论是Acronis True Image在插拨显示器时会多次遍历运行进程列表,浪费大量 CPU 时间,影响电池寿命和电脑性能。调试Explorer.exe时看到很多 C++和 COM 异常及警告,还发现Explorer.exe在繁忙时多次创建“C:\Program Files (x86)\Acronis\TrueImageHome\ti\_managers\_proxy.dll”,不确定其作用但感觉很浪费。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。