在c#中重用或处理自定义字体的有效方法

时间:2016-09-27 13:37:15

标签: c# .net winforms c#-4.0 dispose

我们有C#表单应用程序,它使用了很多控件和每个都有不同大小的自定义字体。问题在于,每当重新创建控件时,不断增长的FONT gdi对象计数会导致OutOfMemory异常(一旦超过10,000计数 - 使用Bear GDI使用测试)。我曾尝试过以下选项,但字体gdi并不保持一致:

  1. 通过在静态类中将其声明为静态变量来重用特定字体类型/大小的每种字体

    static Font Robo_13Reg_Font = new Font(" Roboto",13F,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.Pixel,((byte)(0)));

  2. 创建本地字体变量并在使用完毕后进行处理

  3. 将标签中的字体重复用于所需的控件并处理标签,如下面的代码所示
  4.  public static void getRobo_13Reg_Font(Control addFontTo)
        {
            try
            {
                if (Robo_13Reg_Font == null)
                {
                    Robo_13Reg_Font = new Label();
                    Robo_13Reg_Font.Font = new Font("Roboto", 13F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel, ((byte)(0)));
                }
                addFontTo.Font = Robo_13Reg_Font.Font;
                Robo_13Reg_Font.Dispose();
                Robo_13Reg_Font = null;
            }
            finally
            {
            }
        }
    

    感谢您的所有投入!

1 个答案:

答案 0 :(得分:1)

检查您是否正在创建多个ToolTip实例(新工具提示)并为应用中的工具提示指定字体 - 这也会为正在创建的每个工具提示实例创建字体GDI对象,因为我有类似的问题。