2010-05-04 32 views
0

我在这段代码中有性能问题,我认为这是由“新字体”引起的。c#性能 - 创建字体

如果字体是静态/全局的,它会更快吗?

if (row.StartsWith(TILD_BEGIN)) 
{ 
    rtbTrace.SelectionColor = Color.Maroon; 
    rtbTrace.SelectionFont = new Font(myFont, (float)8.25, FontStyle.Regular); 

    if (row.StartsWith(BEGIN)) 
     rtbTrace.AppendText(Environment.NewLine + row + Environment.NewLine); 
    else 
     rtbTrace.AppendText(Environment.NewLine + row.Substring(1) 
      + Environment.NewLine); 

    continue; 
} 

if (row.StartsWith(EXCL_BEGIN)) 
{ 
    -- similar block 
} 

if (row.StartsWith(DLR_BEGIN)) 
{ 
    -- similar block 
} 
. 
. 
. 

回答

1

如果您可以在每次执行此操作时避免出现“新”,则会更快。因此,如果您多次重复此操作并且字体不会更改,则应该将字体创建重构为不同的位置。

  • 如果你的代码是在一个循环(它看起来这种方式,因为你在它有continue;,那么你可以“新”的字体就这一次外循环,因此被初始化一次per-的一次,而循环迭代
  • 如果代码位于多次调用的方法中,那么可以将Font成员变量添加到您的类中,并使用默认值'new',或者在构造函数或初始化方法中添加它。
  • 如果您创建并销毁正在完成此项工作的类的许多实例,则可以将字体设置为static成员,以便每次执行应用程序时仅初始化一次 - 也可以使用默认值,或者在静态构造函数或初始化方法中。

(或者,在最后两种情况下,如果有时您可能根本不需要使用字体,那么您可以将字体变量初始化为null,然后执行一个懒惰的“准时“通过在需要使用它的任何代码之前检查if (font == null) font = new Font(...);来创建,因此它只创建一次,但如果不需要,则根本不创建)。