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

