C# 使用指定字体

C# 使用指定字体,c#,winforms,C#,Winforms,这两行带有字体的代码之间有什么区别 lblName.Font = new Font("Arial", 12f); 及 哪一个更好地保持内存更空?哪一个更快?等 lblName.Font = new Font("Arial", 12f); 这将创建一种新字体,并使标签使用该字体。如果您有多个标签,您可能只想创建一种字体,并将所有标签设置为一种字体,但除此之外,这是最好的 using(Font font = new Font("Arial", 12f)) lblName.Font = f

这两行带有字体的代码之间有什么区别

lblName.Font = new Font("Arial", 12f);

哪一个更好地保持内存更空?哪一个更快?等

lblName.Font = new Font("Arial", 12f);
这将创建一种新字体,并使标签使用该字体。如果您有多个标签,您可能只想创建一种字体,并将所有标签设置为一种字体,但除此之外,这是最好的

using(Font font = new Font("Arial", 12f))
    lblName.Font = font;
这是创建字体并使标签使用它。然后,当
using
块结束时,将在字体上调用
.Dispose()
,使其释放所有非托管资源(我猜是HFONT windows句柄)。所以你们的标签还并没有被绘制在屏幕上,但它有一个无效的字体对象来这样做,可能什么也不显示,或者抛出异常,或者恢复到一个已知的好标准

长话短说:第二个是错误的。不要在处理完资源后再使用它们

这将创建一种新字体,并使标签使用该字体。如果您有多个标签,您可能只想创建一种字体,并将所有标签设置为一种字体,但除此之外,这是最好的

using(Font font = new Font("Arial", 12f))
    lblName.Font = font;
这是创建字体并使标签使用它。然后,当
using
块结束时,将在字体上调用
.Dispose()
,使其释放所有非托管资源(我猜是HFONT windows句柄)。所以你们的标签还并没有被绘制在屏幕上,但它有一个无效的字体对象来这样做,可能什么也不显示,或者抛出异常,或者恢复到一个已知的好标准


长话短说:第二个是错误的。处理完资源后不要再使用它们。

一旦处理完字体,标签应该使用什么?通常,处理实例会使其不可用…您是否尝试了第二个代码段?
System.Drawing.Font
具有
IDisposable
接口实现-您可以对其使用
using
块,但是
使用
块应该保留给需要在使用后立即处理的对象,如数据库连接。一旦处理字体,标签应该使用的内容可能重复?通常,处理实例会使其不可用…您是否尝试了第二个代码段?
System.Drawing.Font
具有
IDisposable
接口实现-您可以对其使用
using
块,但是
使用
块应该保留给需要在使用后立即处理的对象,如数据库连接。可能重复,但我正在使用
使用
,字体和标签可以正常工作。我的目标是使内存使用最少。@Nofuzy这样的优化不应该是您的优先事项,尽管这是另一个讨论。答案是正确的,您不应该使用已处置的对象。你的代码不应该毫无问题地工作;我不明白它为什么会这样,但在将来的某个地方它可能(会)崩溃。@nofuzzy在这种情况下使用
不是优化,它是错误的。时期访问已处理的对象显然是错误的。通过摆弄单一字体来减少.NET Winforms应用程序的内存占用是。。。有趣的。。。委婉地说。就像挑选你的保险杠贴纸,因为它的抗风值。当然,它是经过优化的,但它确实不是优化汽车性能的合适位置。但我使用的是
,字体和标签可以正常工作。我的目标是使内存使用最少。@Nofuzy这样的优化不应该是您的优先事项,尽管这是另一个讨论。答案是正确的,您不应该使用已处置的对象。你的代码不应该毫无问题地工作;我不明白它为什么会这样,但在将来的某个地方它可能(会)崩溃。@nofuzzy在这种情况下使用
不是优化,它是错误的。时期访问已处理的对象显然是错误的。通过摆弄单一字体来减少.NET Winforms应用程序的内存占用是。。。有趣的。。。委婉地说。就像挑选你的保险杠贴纸,因为它的抗风值。当然,它是经过优化的,但它确实不是优化汽车性能的合适地点。