4

文字列の長さを測定するためにフォントを作成する行がC#コードにあります。

int width = (int)(myGraphics.MeasureString(text, new Font(myFontName, myFontSize, FontStyle.Bold)).Width);

私の質問は、new Font()変数はいつ破棄されるのかということです。フォームが破棄されたときに破棄されますか、それとも即時ですか?

4

2 に答える 2

8

Fontファイナライザーが宣言されています:

~Font()
{
    this.Dispose(false);
}

フォントオブジェクトが作成されると、ファイナライズキューに登録されます。このようなオブジェクトは、ガベージコレクション中に破棄されません(つまり、メモリが割り当てられたままになります)。後でファイナライザーが呼び出されたときに破棄されます(ファイナライザーは実行できません)。Disposeしたがって、手動またはusingステートメントを介して呼び出す方が適切です。この場合、フォントオブジェクトは破棄され、ファイナライズから登録解除されます(したがって、ガベージコレクション中にメモリから削除されます)。

public void Dispose()
{
    this.Dispose(true);
    GC.SuppressFinalize(this);
}

ガベージコレクションとファイナライズについて詳しくは、JeffreyRichterの記事をご覧ください。

于 2012-07-23T21:29:38.590 に答える
-2

ガベージコレクターが気になるときはいつでも廃棄されます。すぐに発生することを保証できないため、disposeの使用にあまり依存しないでください。ただし、使用が完了するまでは破棄されないので安心できます(つまり、スコープ内のオブジェクト内に参照が存在しません)。

于 2012-07-23T21:30:23.500 に答える