Try Catch对效能影响的测试

从合作开始注意了对Try Catch的使用,当时想的是既然错误处理能让程序在测试的时候不出错,那么为什么不在每个程序段上都加上错误处理呢(当时用三层架构开发的系统,只在U层和SQLHelper加上了错误处理)?后来通过和别人交流得知Try Catch会影响程序效能,至于怎么影响的就不得而知了。

在网上查了一番,得到的结论是Try Catch只会在Catch抓住异常的时候影响效能,没有异常的时候对于效能没影响。恰好昨天看到同班同学的博客,对异常处理影响效能做了测试,结论是加了异常处理对效能的影响微乎其微(运行时间增加了1ms)。


先放下别人的结论,咱们自己动下手,写下测试的代码:

Module Module1

    Sub Main()
        '定义Stopwatch类用于记录时间
        Dim sw As New Stopwatch()
        '定义循环次数
        Dim RUN_COUNT As Int32 = 300 * 10000
        '定义循环累加的和
        Dim Sum As Long = 0

       
        '第一次测试,没有Try...Catch
        '开始计时
        sw.Start()
        For i = 0 To RUN_COUNT
            Sum = Sum + i
        Next
        sw.Stop()
        '控制台显示循环时间
        Console.WriteLine("Test1 Sum={0} Time={1}ms", Sum, sw.ElapsedMilliseconds)

       
        '第二次测试,有Try...Catch,不抛异常
        '重置Stopwatch和Sum
        sw.Reset()
        Sum = 0
        '开始计时
        sw.Start()
        '加上Try Catch
        Try
            For i = 0 To RUN_COUNT
                Sum = Sum + i
            Next
        Catch ex As Exception
            Console.WriteLine("Error:{0}", ex.Message)
        End Try
        '计时停止
        sw.Stop()
        '控制台显示所用时间
        Console.WriteLine("Test2 Sum={0} Time={1}ms", Sum, sw.ElapsedMilliseconds)

        
        '第三次测试 用上Try Catch 并抛出异常
        '重置Stopwatch和Sum
        sw.Reset()
        Sum = 0
        '开始计时
        sw.Start()
        '加上Try Catch 
        Try
            For i = 0 To RUN_COUNT
                Sum = Sum + i
            Next
            Throw New Exception("循环后抛出的异常")
        Catch ex As Exception
            Console.WriteLine("Error:{0}", ex.Message)
        End Try
        '计时停止
        sw.Stop()
        '控制台显示所用时间
        Console.WriteLine("Test3 Sum={0} Time={1}ms", Sum, sw.ElapsedMilliseconds)

        Console.ReadLine()
    End Sub ' Main

End Module
写好代码就可以进行测试了,激动人心那。

这是运行的结果

Try Catch对效能影响的测试_第1张图片

可以看到,没有Try Catch的test1和有Try Catch 但没有抛出异常的程序时间一样,有Try Catch 并抓住异常的test3运行所用时间大概增加了11ms,不到一倍的样子(多次运行测试,时间虽有不同,但相差不多)。从这个测试可以看出,加了Try Catch确实会影响效能。

做程序,考虑性是一方面,程序的稳定也是一个相当重要的方面,因此在有可能出错的地方加上Try Catch 还是非常必要的。


你可能感兴趣的:(catch)