我正在使用.NET 3.5应用程序的维护。在应用程序启动期间,从工作目录中读取许多字体并在Windows中注册。我们对每个字体文件使用针对AddFontResource(string lpFileName)
(Gdi32.dll)的pinvoke调用。
代码一直很快,直到我升级到Win10周年更新(在此之前,Win10没有问题)。现在呼叫可能需要半秒钟,这会使启动时间增加90秒。
知道什么可能导致问题吗?以及如何解决它?
答案 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);
这解决了我亲自测试的至少一台机器的缓慢问题。