在try,catch块之外运行代码是否有任何性能优势?

时间:2009-09-23 01:28:13

标签: c# .net 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;
        }
    }

4 个答案:

答案 0 :(得分:10)

在.net中,如果实际抛出异常,try / catch只会产生开销。所以不要过分担心在try内部使用代码会对性能产生什么影响。只是不要将异常作为一种流控制形式抛出。

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:3)

我同意递归,但你可能想看一个很好的解释: http://www.programmersheaven.com/user/pheaven/blog/175-Do-trycatch-blocks-hurt-runtime-performance/

基本上,使用try..catch没有问题,但是,我倾向于限制我在其中的内容,因为我认为依赖它们是不好的做法,而不是尽你所能来确保不抛出异常因为异常将是昂贵的,所以,在获得它的长度之前检查该字符串是否为空。

答案 3 :(得分:3)

我同意上述内容但你不应该把你的整个代码块放在try catch中,让它捕获一个formatexception或null引用。您应该为这些代码编写代码并自行处理。

我不知道有多少次见过:

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

如果id为null,显然是空引用,所以检查它是否为null,不要尝试/捕获它。