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
  • asp之家 软件编程 m.aspxhome.com