AddFontResource() 在 Win10 周年更新时变慢

AddFontResource() slow on Win10 Anniversary Update

我正在维护 .NET 3.5 应用程序。在应用程序启动期间,从工作目录中读取许多字体并在 Windows 中注册。我们对每个字体文件使用 pinvoke 调用 AddFontResource(string lpFileName) (Gdi32.dll)。

代码一直很快,直到我升级到Win10 Anniversary Update(在此之前,Win10没有问题)。现在一次调用只需半秒,启动时间增加了 90 秒。

知道是什么导致了这个问题吗?以及如何修复它?

Windows 10 周年更新破坏了 AddFontResource 和 RemoveFontResource API 的性能。我们现在正在 PortableApps.com 处理它的后果。这只是应用周年更新后 Windows 10 的问题。太糟糕了,我的旧款慢速 ASUS T100 敞篷车从 USB 驱动器运行代码的速度比我的 i7 台式机从内部 SSD 运行代码的速度快。

我也观察到这个问题,但在我们的案例中我找到了解决方案:调用 AddFontResourceEx().

我们代码中的完整更改是:

// from this
AddFontResource(pFont);

// to this
AddFontResourceEx(pFont, FR_PRIVATE, 0);

这至少解决了我亲自测试过的一台机器的缓慢问题。