“提高一下dotnet程序的效率一”中关于exception的问题
看了提高一下dotnet程序的效率一中关于exception的部分和相关的评论,我觉得有些知识点可能大家平时没有注意到或没有深入的了解:
- Exception在没有产生exception的时候,换句话说没catch到exception的时候没有效率影响. 这是不对的,try里面的语句不会被compiler优化,compiler能编译程序不是主要用途,能优化才是它的价值所在.
- winform和webform的exception处理没有什么不同的,exception是.net framework的,是.net的重要组成部分.
- “如果在web上传递信息的时候采用了异常机制,那么并发量大的情况下,这个开销将是吓人的”这个结论是对的,结果是当有大量exceptions的时候,你的server将会遭遇high cpu.
- exception的处理会暂停当前的工作被优先处理,如果throw出一个exception,让它穿透,当你在最远的地方catch它的时候,性能的损耗是最多的.
- exception的处理也是GC头疼的问题之一, 这也是high cpu的根源
- asp.net框架里你可以在global.asax里handle所以的异常,但是并不能说明你的website就这些异常了,有写异常已经被asp.net自己处理了.比如Response.End()方法.
- 如果你的perfmon里# of excepts thrown / sec的值超过20,建议该review一下程序了,是否真的有必要去抛出这些异常或能否避免这样的情况发生.
- 别人说的并不一定都是对的,就像上面的7条一样.花点时间亲手做个实验吧.
千里之堤,以蝼蚁之穴溃;百尺之室,以突隙之烟焚.
I/O,Data Access,这些看似在性能上存在bottleneck的东西其实是源于我们思维的定式:你的操作系统和文件系统难道真的发挥硬盘的I/O水平了吗?你的一定要把数据放在一个叫做数据库的东西里面吗?
了解原理和内部实现, the more the better.
Feedback
添加 try...catch 块确实会增加额外的开销,这本身就是由 SEH 决定的。
但是在没有异常抛出的时候,这个额外开销并不大。怕的是 try...catch 块嵌套,尤其是无意识的嵌套。这种累积性的额外开销可能会增长到影响程序性能的地步。此外,不能被编译器优化的是 try...catch 块,而不是其内部编码。
另外就是频繁的抛出异常是性能杀手,因为一旦抛出异常,在辗转展开堆栈,查找异常位置的时候,非常耗费时间。
既然说到这了,顺便再说下关于异常与性能的话题。《.NET 设计规范》里有提及,MSDN 也有那篇文章的内容。它提出了两个模式 Tester-Doer 和 Try-Parse 。
对于库开发人员来说,根本不用在乎上述问题,有问题就抛异常。当然有时候还要考虑下 Try-Parse 模式。真正麻烦的是客户应用开发人员,也就是使用库的开发人员。
还有就是绝大部分异常在产品测试的时候都会得到妥善处理。
Over...
内部代码使用 try catch 捕捉异常,然后并不向上抛,而是写到属性(ErrorMsg)里面。
调用的地方,调用函数后,先判断一下ErrorMsg是不是 '' ,不是的话,说明出现了异常。
我的数据访问函数库就是用的这种方式处理的“抛出异常”的。
http://www.cnblogs.com/jyk/archive/2008/06/15/1222637.html
转载于:https://www.cnblogs.com/chy8219/archive/2008/07/07/1237420.html
“提高一下dotnet程序的效率一”中关于exception的问题相关推荐
- 30 个提高Web 程序执行效率的好经验[转]
1. 尽量避免使用DOM.当需要反复使用DOM 时,先把对DOM 的引用存到JavaScript 本地变量里再使用.使用设置innerHTML的方法来替换document.createElement/ ...
- 解读30个提高Web程序执行效率的好经验
其实微博是个好东西,关注一些技术博主之后,你不用再逛好多论坛了,因为一些很好的文章微博会告诉你,最近看到酷勤网推荐的一篇文章<30个提高Web程序执行效率的好经验>,文章写得不错,提到一些 ...
- EJB通过ANT提高EJB应用程序的开发效率、无状态发展本地接口bean、开发状态bean...
该jboss集成到eclipse 关掉Jboss控制台新闻Ctrl+c,在MyEclipse→Servers→Jboss可配置JBoss. 通过ANT提高EJB应用的开发效率 在HelloWorld ...
- 视频图文教学 - 用最快的速度把 DotNet Core Blazor 程序安装到 树莓派中 并且用网页控制 GPIO 闪灯
前言 dotnet core 在3.0时代已经发展得很好. 尤其是在跨平台方面更已经是达到了很实用的阶段. 作为 dotnet 程序员, 应该对 Linux 有充分的了解, 也可以在业余时间玩玩硬件, ...
- 串行并行程序在效率上的简单比较
串行&并行程序在效率上的简单比较 分类: Multi-X 2010-10-15 10:33 1198人阅读 评论(0) 收藏 举报 parallel工作程序开发作业语言测试 开头: 这 ...
- java 反射的效率_如何提高使用Java反射的效率?
前言 在我们平时的工作或者面试中,都会经常遇到"反射"这个知识点,通过"反射"我们可以动态的获取到对象的信息以及灵活的调用对象方法等,但是在使用的同时又伴随着另 ...
- 关于计算机工作的诗歌,提高计算机工作及上网效率的方法
提高计算机工作及上网效率的方法 1. 经常进行"磁盘清理"和磁盘碎片整理" 2. 移动internet临时文件和临时交换文件internet临时文件和临时交换文件是我们上 ...
- 微信小程序开发05 研发加速:使用 Webpack 提升小程序研发效率
你好,我是俊鹏.从今天开始,我会用四节课的时间带你学习微信小程序在工程化方面的实践方案. 小程序发展到今天已经成为很多产品的重要流量入口,随着用户量的增加,功能不断复杂化,小程序的体量不断增长,原始的 ...
- DevOps 解决方案:最大限度地提高开发人员的工作效率,缩短上市时间以及提高客户满意度
DevOps 解决方案:和平.爱心与工作效率 为见证开发和运营之间前所未有的协作而做好准备.我们的解决方案可消除阻碍,有助于最大限度地提高开发人员的工作效率,缩短上市时间以及提高客户满意度. 为什么选 ...
最新文章
- R语言使用Rtsne包进行TSNE分析:提取TSNE分析结果合并到原dataframe中、可视化tsne降维的结果、并圈定降维后不匹配的数据簇(tSNE identifying mismatch)
- Android:四种启动模式分析
- apt-get出现no public key available for the following key IDs
- python的jupyter的使用教程-如何优雅地使用 Jupyter?
- LeetCode Integer Replacement
- php中的static
- 一款好用且免费的语句分析工具Plan Explorer
- jquery unbind 异步_JQuery中的bind()和unbind()的理解
- 【剑指offer - C++/Java】8、跳台阶
- python如何下载安装spacy_使用pip安装Spacy时出错
- 2019中国企业500强榜单发布:涉及76个行业
- python3-字典中存储列表
- MySQL函数大全,MySQL常用函数汇总
- TeamTalk消息协议
- 最新微信养号、使用、解封必看的注意事项
- bzoj2037 创世纪
- matlab三维投影图,matlab三维图投影轮廓
- 支付宝与微信:移动支付的巅峰对决
- 在职MBA与普研、MEM是有区别的
- html5 扫描条码,原 HTML5+规范:barcode(条码扫描)