字體池的應用,主要是為了解決字體不斷創建導致句柄泄漏/內存泄漏的問題,這個問題在Android上也同樣存在。
經測試,C# WinForm原生控件不存在字體問題,但是使用的第三方控件Dev 14.1就存在這樣的問題。
所以參照線程池思路,想到了使用字體池的方式,使系統中的字體統一為一個對象,經測試,有效解決了泄漏問題。
字體池代碼:
/// <summary>/// 字體緩存類/// </summary>public static class FontStatic{ /// <summary> /// 緩存數組 /// </summary> private static Dictionary<string, Font> sFonts = new Dictionary<string, Font>(); /// <summary> /// 根據字體獲取一個緩存的字體對象 /// </summary> /// <param name="font">字體</param> /// <returns>已緩存字體</returns> public static Font GetFont(Font font) { string key = string.Format("{0}-{1}-{2}-{3}", font.Name, font.Size, font.Italic, font.Bold); if (!sFonts.ContainsKey(key)) { sFonts.Add(key, font); } return sFonts[key]; }}
這里關鍵點在于判斷需要創建的字體是否已存在緩存字典中,經過探索,不能使用Equals等方法,只能折中采用幾個關鍵屬性組合判斷的方式
以上就是本次介紹的全部相關知識點,希望武林網之家整理的內容能夠幫助到大家。
新聞熱點
疑難解答