我正在維護.NET 3.5應用程序。在應用程序啓動過程中,會從工作目錄中讀取許多字體並在Windows中註冊。我們使用針對每個字體文件的撥打電話AddFontResource(string lpFileName)
(Gdi32.dll)。Win10週年紀念更新緩慢AddFontResource()
代碼一直很快,直到我升級到Win10週年紀念更新(在此之前,Win10沒有問題)。現在,通話可能需要半秒鐘,而啓動時間增加了90秒。
任何想法是什麼會導致問題?以及如何解決它?
我正在維護.NET 3.5應用程序。在應用程序啓動過程中,會從工作目錄中讀取許多字體並在Windows中註冊。我們使用針對每個字體文件的撥打電話AddFontResource(string lpFileName)
(Gdi32.dll)。Win10週年紀念更新緩慢AddFontResource()
代碼一直很快,直到我升級到Win10週年紀念更新(在此之前,Win10沒有問題)。現在,通話可能需要半秒鐘,而啓動時間增加了90秒。
任何想法是什麼會導致問題?以及如何解決它?
我也觀察到這個問題,但在我們的案例中,我找到了一個解決方案:致電AddFontResourceEx()。
在我們的代碼完整的變化是:
// from this
AddFontResource(pFont);
// to this
AddFontResourceEx(pFont, FR_PRIVATE, 0);
這在我親自測試了機器的至少一個解決了緩慢的問題。
需要進行一些調整,但上述方法完美無缺。 private const uint FR_PRIVATE = 0x10; [DllImport("gdi32.dll")] static extern int AddFontResourceEx(string lpszFilename, uint fl, IntPtr pdv); AddFontResourceEx("filename", FR_PRIVATE, IntPtr.Zero);
–
Windows 10週年更新會破壞AddFontResource和RemoveFontResource API的性能。我們現在正在處理PortableApps.com中的後果。在週年更新應用後,這只是Windows 10上的一個問題。這很糟糕,我舊的慢速華碩T100敞篷版從USB驅動器運行代碼的速度比我的i7臺式機從內置SSD中運行得快。
好的。總是很高興知道它不僅在我的機器上,這是一個問題,感謝信息約翰和@Marc Fauser。 –
如果您可以在此問題上獲得一致的repro,那麼您是否已將其報告給Microsoft?在沉默中忍受痛苦沒有任何好處。 –
如果微軟沒有不可能報告任何事情,我會高興地報告。我花了兩次嘗試爲微軟的破壞控制器進行修復,第一個代理人爲我配件購買了我甚至沒有的東西。 –
我想要研究這個問題的方法是創建一個全新的項目,只需*調用AddFontResource,看看它是否仍然在Windows 10上運行緩慢。嘗試使用與您載入的完全相同的字體應用程序,然後嘗試使用不同的字體。看看在這兩種情況下它是否緩慢。嘗試縮小問題範圍。 –