C#字体池技术实现代码详解
作者:未闻·Yokeqi 时间:2022-12-30 06:18:02
字体池的应用,主要是为了解决字体不断创建导致句柄泄漏/内存泄漏的问题,这个问题在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等方法,只能折中采用几个关键属性组合判断的方式
来源:https://blog.csdn.net/Yokeqi/article/details/50601639
标签:C#,字体池
0
投稿
猜你喜欢
浅谈Java面向接口编程
2021-07-25 16:29:58
C语言实现扫雷小游戏的示例代码
2022-05-21 13:05:18
基于Spring depends-on的使用详解
2021-09-29 16:23:20
java Quartz定时器任务与Spring task定时的几种实现方法
2021-11-14 22:31:47
Android webview与js的数据交互
2021-08-18 02:56:32
Android模仿美团顶部的滑动菜单实例代码
2023-04-24 08:10:23
Android开发自定义双向SeekBar拖动条控件
2022-06-02 03:55:25
C#加密解密类实例程序
2022-01-25 18:17:09
Android自定义标尺滑动选择值效果
2022-06-30 20:09:27
详解Java中的泛型
2021-12-02 14:57:34
spreadsheetgear插件屏蔽鼠标右键的方法
2022-06-21 14:04:18
Java File类提供的方法与操作
2023-08-29 09:10:41
c#删除指定文件夹中今天之前的文件
2022-02-26 22:57:27
简单了解Spring Framework5.0新特性
2021-08-06 02:21:46
Java中LocalDateTime的具体用法
2023-11-23 14:00:05
Android ListView UI组件使用说明
2022-06-14 16:04:09
C#中Dictionary<TKey,TValue>排序方式的实现
2021-07-13 10:59:10
java实现倾斜水印铺满整张图
2023-12-24 22:34:21
C#泛型语法详解
2023-01-28 18:20:12
SpringMVC中MultipartFile上传获取图片的宽度和高度详解
2023-01-30 20:43:19