C#字體池技術(shù)實(shí)現(xiàn)代碼詳解
字體池的應(yīng)用,主要是為了解決字體不斷創(chuàng)建導(dǎo)致句柄泄漏/內(nèi)存泄漏的問題,這個(gè)問題在Android上也同樣存在。
經(jīng)測(cè)試,C# WinForm原生控件不存在字體問題,但是使用的第三方控件Dev 14.1就存在這樣的問題。
所以參照線程池思路,想到了使用字體池的方式,使系統(tǒng)中的字體統(tǒng)一為一個(gè)對(duì)象,經(jīng)測(cè)試,有效解決了泄漏問題。
字體池代碼:
/// <summary>
/// 字體緩存類
/// </summary>
public static class FontStatic
{
/// <summary>
/// 緩存數(shù)組
/// </summary>
private static Dictionary<string, Font> sFonts = new Dictionary<string, Font>();
/// <summary>
/// 根據(jù)字體獲取一個(gè)緩存的字體對(duì)象
/// </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)知識(shí)點(diǎn),希望腳本之家整理的內(nèi)容能夠幫助到大家。
相關(guān)文章
C#使用SqlBulkCopy批量復(fù)制數(shù)據(jù)到數(shù)據(jù)表
這篇文章主要介紹了C#使用SqlBulkCopy批量復(fù)制數(shù)據(jù)到數(shù)據(jù)表的方法,較為詳細(xì)的講述了SqlBulkCopy批量復(fù)制數(shù)據(jù)到數(shù)據(jù)表的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下2014-10-10
C#如何打開選擇文件對(duì)話框和選擇目錄對(duì)話框
這篇文章主要介紹了C#如何打開選擇文件對(duì)話框和選擇目錄對(duì)話框問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
C#使用遠(yuǎn)程服務(wù)調(diào)用框架Apache Thrift
這篇文章介紹了C#使用遠(yuǎn)程服務(wù)調(diào)用框架Apache Thrift的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
C#中使用XmlDocument類來創(chuàng)建和修改XML格式的數(shù)據(jù)文件
這篇文章主要介紹了C#中使用XmlDocument類來創(chuàng)建和修改XML格式的數(shù)據(jù)文件的方法,XmlDocument類被包含在.NET框架中,需要的朋友可以參考下2016-04-04

