C#字体池技术实现代码详解
- 作者: 弱水三千_只留一瓢
- 来源: 51数据库
- 2020-08-07
在本篇文章里小编给大家整理的是关于C#字体池技术实现代码详解内容,有需要的朋友们可以学习下。
字体池的应用,主要是为了解决字体不断创建导致句柄泄漏/内存泄漏的问题,这个问题在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等方法,只能折中采用几个关键属性组合判断的方式
以上就是本次介绍的全部相关知识点,
推荐阅读
- C#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源
热点文章
团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
0
使用 MSBuild.exe 在发布模式下构建 C# 解决方案
0
当我发布 Web 应用程序时,AfterPublish 脚本不运行
0
构建时 T4 转换的产品仅在下一个构建中使用
0
ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
0
新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
0
如何将条件编译符号(DefineConstants)传递给 msbuild
0
MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
0
NuGet 包还原找不到包,没有源
0
使用 C# 6.0 功能运行 TFS 构建
0
