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);
}

您可以在 Jeffrey Richter 的文章中阅读有关垃圾收集和终结的更多信息

于 2012-07-23T21:29:38.590 回答
-2

每当垃圾收集器感觉时,它就会被处理掉。您不应该过多依赖使用 dispose,因为您不能保证它会很快发生。您可以放心,在您完成使用它之前不会释放它(即在范围内的对象中不存在对它的引用)

于 2012-07-23T21:30:23.500 回答