关于try/catch...finally的性能

最近在网上找了一下,针对C++,下表看性能影响不是很大,关键在于对exception的基类的定义,建议都从std::exception开始

Execution Speed with and without Exception Handling
 

w/o EH

w/EH

%

Borland

78 sec

83 sec

6%

Microsoft

83 sec

87 sec

5%

Symantec

94 sec

96 sec

4%

 

针对.net 的CLR,一个声明的exception只是在protect region里面增加了一条记录,相应的在byte code外增加了一些代码,一旦exception被throw出来,就会被CLR直到相应的区域去处理,不会影响太多的性能。finally的部分也需要增加一块,但编译器可以静态的确定着这部分代码是一定要执行的,因此可以直接JIT,所以也不会影响性能。

 

根据exception的特性,如果没有相应的处理,则会被转给上一级去查找,这里可能会存在性能问题,在于写程序的时候对exception的处理,如果没有在本地及时处理的话,就看函数一级一级pop stack的overhead了。 另外一个影响性能的地方在于,在try ... catch 之间的代码,不会被编译器优化,所以需要很小心。

 

总的来说,exception handle还是一项非常有用的特性,对性能没有很大影响,可以帮助人们在编译阶段住处程序中需要的异常处理从而减少runtime的异常

你可能感兴趣的:(关于try/catch...finally的性能)