我们发现在更新到 1709 的系统上使用 SHFileOperation 删除文件夹的速度非常慢。似乎有一些与通用 Windows 应用程序相关的东西导致了这种情况。
这段代码:
sFileOp.wFunc = FO_DELETE;
sFileOp.pFrom = buf;
sFileOp.fFlags = FOF_SILENT|FOF_NOCONFIRMATION|FOF_NOERRORUI;
if(SHFileOperation(&sFileOp))
传递了一个类似“C:\Jobs\Job1”的路径(是的,双空终止),文件夹中有少量文件——比如 2 或 3——在 Windows 7 和 Windows 10 1511 上以毫秒为单位运行。在 Windows 10 1709需要 1 到 3 秒。
我们在 Visual Studio 2013 的输出窗口中注意到,在调用 SHFileOperation 之后和返回之前,有 3 或 4 条这样的消息:
onecoreuap\shell\windows.storage\sharedstoragesources\util.cpp(2831)\windows.storage.dll!7650BF24: (caller: 765D88E4) ReturnHr(1) tid(1bb0) 80070490 找不到元素。
这是一个用 VS2013 构建的 Win32、x86 应用程序。这发生在我们已经发布超过 18 个月的版本中。回顾一下版本在 1511 和 Windows 7 上按预期运行,在最后两个 Windows 10 更新上太慢了。不知何故,我们似乎与通用 Windows 应用程序 DLL 纠缠不清。我们如何避免这种情况?