关于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的异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值