在Win10周年纪念更新中,AddFontResource()变慢

时间:2016-08-31 19:07:00

标签: c# windows pinvoke

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

代码一直很快,直到我升级到Win10周年更新(在此之前,Win10没有问题)。现在呼叫可能需要半秒钟,这会使启动时间增加90秒。

知道什么可能导致问题吗?以及如何解决它?

2 个答案:

答案 0 :(得分:2)

Windows 10周年纪念更新破坏了AddFontResource和RemoveFontResource API的性能。我们现在在PortableApps.com处理它的后果。在应用周年纪念更新后,这只是Windows 10上的一个问题。这是非常糟糕的,我的老式慢速华硕T100敞篷车从USB驱动器运行代码比我的i7台式机从内部SSD运行更快。

答案 1 :(得分:0)

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

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

// from this
AddFontResource(pFont);

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

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