2009-09-23 60 views
1

我很想知道是否应该最小化try/catch块内部的代码,或者它确实无关紧要。在try,catch块之外运行代码有没有任何性能优势?

public bool ObjectExists(string stringTest, string againSomethingElse) 
    { 
     if(true) {} 
     else {} //Code here is better/worst/same 
     try 
     { 
      //Versus code inside try/catch block 

     } 
     catch (Exception) 
     { 

      throw; 
     } 
    } 

回答

10

在.net中,如果实际抛出异常,try/catch只会产生开销。因此,不要过于担心try中的代码的性能影响。只是不要将异常作为流量控制的一种形式。

+0

+1 - 关于何时不抛出异常的最后一句话。 – 2009-09-23 01:36:48

3

我同意上面的内容,但是你不应该把你的整个代码块放在try catch中,让它抓住formatexception或null引用。你应该为这些编写代码并自己处理它们。

我不知道有多少次我看到:

try { 
Request.QueryString["id"].ToString(); 
} 

显然,一个空引用如果id为null,所以检查它是否为空,不要试图/抓住它。

6

下面是解决此问题的正确方法。

首先编写代码,以便异常处理是正确的。始终保持正确。

然后设定合理的,以客户为中心的绩效目标。然后测试你的程序。然后,如果你没有达到你的目标,使用一个分析器来找到最慢的事情。如果一些奇怪的巧合最慢的事情碰巧是你正确的异常处理,那么你应该考虑异常处理的性能成本。

+0

+1 - 早期优化=邪恶! – 2009-09-23 04:24:18

+0

+1 YUP ...埃里克的再次挂在这里的C#标记的问题:) – 2009-09-23 05:11:21

+2

好吧,*是啊*。 - – 2009-09-23 06:03:45