这个Font对象什么时候被处理?

时间:2012-07-23 21:27:04

标签: c# .net garbage-collection

我的C#代码中有一行创建字体以测量字符串的长度:

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

我的问题是,new Font()变量何时处理?表格处理时是处理还是立即处理?

2 个答案:

答案 0 :(得分:8)

Font宣告了终结者:

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

创建字体对象时,它已在终结队列中注册。在垃圾收集期间,这些对象不会被销毁(即内存保持分配) - 当终结器被调用时(btw终结器永远不会被执行),它们会被破坏。因此,可以手动或通过Dispose语句更好地调用using。在这种情况下,字体对象将从最终化处理和取消注册(因此在垃圾收集期间将从内存中删除):

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

您可以阅读有关垃圾收集和最终确定的更多信息in Jeffrey Richter's article

答案 1 :(得分:-2)

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