C#フォームアプリケーションは、さまざまなサイズのコントロールとカスタムフォントを使用します。この問題は、OutOfMemory Exceptionを引き起こすFONT gdiオブジェクトの数が増えている(1回10,000カウントを超えた - これをBear GDIの使用でテストしたとき)、コントロールが再作成されるたびに発生します。私はオプションの下にしようとしたが、フォントのGDIは一貫滞在していません:Cでカスタムフォントを再利用または処理する効率的な方法#
リユース、特定のフォントの種類/サイズの各フォントを静的変数として宣言することにより、静的クラスに
を新しい静的フォントRobo_13Reg_Font = Font( "Roboto"、13F、System.Drawing.FontStyle.Regular、System.Drawing.GraphicsUnit.Pixel、((byte)(0)));
それは使用だ後に必要な制御にラベルから
- リユースフォントを行って、ラベルを配置、
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
{
}
}
次のコードのようにされているローカルフォント変数を作成し、処分
あなたのすべての入力をよろしく!
すべてのコントロールに新しい 'Font'インスタンスを作成するのではなく、フォントのサイズをキーにした辞書のようにフォントをキャッシュできますか?そうすれば、サイズごとに1つのインスタンスしか存在しません。 –
私はフォントオブジェクトを保持する静的変数を使用して同様のアプローチを試みたので、これがこの問題をどのように解決するか説明してください。 –
@ BradleyUffnerが見つかったので、同じフォントを何度も何度も作成していないので、おそらくOOMが発生します。オプション1は大丈夫だと思いますが、「フォントgdiは一貫性を失っていません」という意味は分かりません。 – Sinatr