我的C#代码中有一行创建字体以测量字符串长度的代码:
int width = (int)(myGraphics.MeasureString(text, new Font(myFontName, myFontSize, FontStyle.Bold)).Width);
我的问题是,
new Font()
变量何时被释放?它是在窗体被释放时释放,还是立即释放?我的C#代码中有一行创建字体以测量字符串长度的代码:
int width = (int)(myGraphics.MeasureString(text, new Font(myFontName, myFontSize, FontStyle.Bold)).Width);
new Font()
变量何时被释放?它是在窗体被释放时释放,还是立即释放?Font
声明了 finalizer:
~Font()
{
this.Dispose(false);
}
当字体对象被创建时,它会在终结器队列中注册。这样的对象在垃圾回收期间不会被销毁(即内存仍然保留),它们在稍后调用终结器时才被销毁(顺便说一下,终结器可能永远不会执行)。因此最好手动调用Dispose
或通过using
语句来调用。在这种情况下,字体对象将被处理并从终结器中注销(因此它将在垃圾回收期间从内存中删除):
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
你可以在 Jeffrey Richter 的文章中了解更多关于垃圾回收和终结的知识。点击这里阅读
它将在垃圾回收器感觉合适时被处理。你不应该过度依赖dispose,因为你无法保证它会很快发生。但是你可以放心,只要你使用完毕(即在范围内的对象中不存在对它的引用),它就不会被处理。