C#字體池技術(shù)實(shí)現(xiàn)代碼詳解
字體池的應(yīng)用,主要是為了解決字體不斷創(chuàng)建導(dǎo)致句柄泄漏/內(nèi)存泄漏的問題,這個(gè)問題在Android上也同樣存在。
經(jīng)測試,C# WinForm原生控件不存在字體問題,但是使用的第三方控件Dev 14.1就存在這樣的問題。
所以參照線程池思路,想到了使用字體池的方式,使系統(tǒng)中的字體統(tǒng)一為一個(gè)對象,經(jīng)測試,有效解決了泄漏問題。
字體池代碼:
/// <summary>
/// 字體緩存類
/// </summary>
public static class FontStatic
{
/// <summary>
/// 緩存數(shù)組
/// </summary>
private static Dictionary<string, Font> sFonts = new Dictionary<string, Font>();
/// <summary>
/// 根據(jù)字體獲取一個(gè)緩存的字體對象
/// </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];
}
}
這里關(guān)鍵點(diǎn)在于判斷需要?jiǎng)?chuàng)建的字體是否已存在緩存字典中,經(jīng)過探索,不能使用Equals等方法,只能折中采用幾個(gè)關(guān)鍵屬性組合判斷的方式
以上就是本次介紹的全部相關(guān)知識點(diǎn),希望腳本之家整理的內(nèi)容能夠幫助到大家。
相關(guān)文章
c#判斷網(wǎng)絡(luò)連接狀態(tài)的示例分享
這篇文章主要介紹了使用c#判斷網(wǎng)絡(luò)連接狀態(tài)的示例,需要的朋友可以參考下2014-02-02
c# Newtonsoft.Json 常用方法總結(jié)
這篇文章主要介紹了c# Newtonsoft.Json 常用方法的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-02-02
Unity的IPostBuildPlayerScriptDLLs實(shí)用案例深入解析
這篇文章主要為大家介紹了Unity的IPostBuildPlayerScriptDLLs實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
DevExpress設(shè)置TreeList圖片節(jié)點(diǎn)背景色的方法
這篇文章主要介紹了DevExpress設(shè)置TreeList圖片節(jié)點(diǎn)背景色的方法,需要的朋友可以參考下2014-08-08

