2016-09-27 5 views
2

C#フォームアプリケーションは、さまざまなサイズのコントロールとカスタムフォントを使用します。この問題は、OutOfMemory Exceptionを引き起こすFONT gdiオブジェクトの数が増えている(1回10,000カウントを超えた - これをBear GDIの使用でテストしたとき)、コントロールが再作成されるたびに発生します。私はオプションの下にしようとしたが、フォントのGDIは一貫滞在していません:Cでカスタムフォントを再利用または処理する効率的な方法#

  1. リユース、特定のフォントの種類/サイズの各フォントを静的変数として宣言することにより、静的クラスに

    新しい静的フォントRobo_13Reg_Font = Font( "Roboto"、13F、System.Drawing.FontStyle.Regular、System.Drawing.GraphicsUnit.Pixel、((byte)(0)));

  2. それは使用だ後に必要な制御にラベルから

  3. リユースフォントを行って、ラベルを配置、

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 
     { 
     } 
    } 
次のコードのようにされているローカルフォント変数を作成し、処分

あなたのすべての入力をよろしく!

+0

すべてのコントロールに新しい 'Font'インスタンスを作成するのではなく、フォントのサイズをキーにした辞書のようにフォントをキャッシュできますか?そうすれば、サイズごとに1つのインスタンスしか存在しません。 –

+0

私はフォントオブジェクトを保持する静的変数を使用して同様のアプローチを試みたので、これがこの問題をどのように解決するか説明してください。 –

+0

@ BradleyUffnerが見つかったので、同じフォントを何度も何度も作成していないので、おそらくOOMが発生します。オプション1は大丈夫だと思いますが、「フォントgdiは一貫性を失っていません」という意味は分かりません。 – Sinatr

答えて

1

多くのToolTipインスタンス(新しいツールヒント)を作成し、アプリでツールチップのフォントを割り当てていることを確認します - これは、同様の問題があったため、作成する各ツールチップインスタンスのフォントGDIオブジェクトを作成します。

+0

これは私の問題を解決していただきありがとうございます。それは私がコントロールと一緒に作成していたツールチップのインスタンスのためだった。 –

関連する問題