WEB开发网
开发学院软件开发C语言 Effective C# 原则31:选择小而简单的函数 阅读

Effective C# 原则31:选择小而简单的函数

 2009-02-19 08:16:07 来源:WEB开发网   
核心提示:做为一个有经验的程序员,不管你在使用C#以前是习惯用什么语言的,Effective C# 原则31:选择小而简单的函数,我们综合了几个可以让你开发出有效代码的实际方法,有些时候,你可以通过让JIT把代码分解成更多的小块,从而来最小化大量无关的代码,我们在先前的环境中所做的努力在.Net环境中却成了相反的,特别是在你试图

做为一个有经验的程序员,不管你在使用C#以前是习惯用什么语言的,我们综合了几个可以让你开发出有效代码的实际方法。有些时候,我们在先前的环境中所做的努力在.Net环境中却成了相反的。特别是在你试图手动去优化一些代码时尤其突出。你的这些行为往往会阻止JIT编译器进行最有效的优化。你的以性能为由的额外工作,实际上产生了更慢的代码。你最好还是以你最清楚的方法写代码,其它的让JIT编译器来做。最常见的一个例子就是预先优化,你创建一个很长很复杂的函数,本想用它来避免太多的函数调用,结果会导致很多问题。实际操作时,提升这样一个函数的逻辑到循环体中对.Net程序是有害的。这与你的真实是相反的,让我们来看一些细节。

这一节介绍一个简单的内容,那就是JIT编译器是如何工作的 。.Net运行时调用JIT编译器,用来把由C#编译器生成的IL指令编译成机器代码。这一任务在应用程序的运行期间是分步进行的。JIT并不是在程序一开始就编译整个应用程序,取而代之的是,CLR是一个函数接一个函数的调用JIT编译器。这可以让启动开销最小化到合理的级别,然而不合理的是应用程序保留了大量的代码要在后期进行编译。那些从来不被调用的函数JIT是不会编译它的。你可以通过让JIT把代码分解成更多的小块,从而来最小化大量无关的代码,也就是说小而多的函数比大而少的函数要好。考虑这个人为的例子:

public string BuildMsg( bool takeFirstPath )
{
 StringBuilder msg = new StringBuilder( );
 if ( takeFirstPath )
 {
  msg.Append( "A problem occurred." );
  msg.Append( "nThis is a problem." );
  msg.Append( "imagine much more text" );
 } else
 {
  msg.Append( "This path is not so bad." );
  msg.Append( "nIt is only a minor inconvenience." );
  msg.Append( "Add more detailed diagnostics here." );
 }
 return msg.ToString( );
}

1 2 3  下一页

Tags:Effective 原则 选择

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接