关于代码运行效率问题的一个总结和一点疑问

通过重构模块算法,系统性能反而下降1000倍,原因在于循环体内调用了重型方法,仅5%情况触发却占用99.9%运行时间。提醒开发者注意循环体内方法调用的效率。
  首先要承认,这个随笔的名字起得有点儿别扭。
  自从自己开发GEA52以来,就一直思考有关程序运行效率的问题。按照自己以往的思路,程序运行得慢了,可能的情形有很多,性能瓶颈可能出现在Web服务器的内存上,Web服务器的cpu上,Web服务器与DB服务器之间的IO开销上,总而言之不经过一番仔细的分析和艰苦的调试是很难解决性能问题的。甚至当有的时候有些操作确实很耗系统资源的时候,你不得不手工限制这种任务的并发数,变并行为串行,以保障其他操作的运行效率。但经过今天上午的调试,我的这些观点发生了一点点变化。
  在一个已有的Web系统中,我对其中的一个模块儿进行了重构。这种重构不是为了改善代码结构或者提高代码效率,仅仅是改变模块儿中用到的算法。新算法和老算法的效率是相近的,但重构完之后我却发现系统性能有了非常严重的下降,处理同量数据的耗时提高了1000倍!刚开始我很受打击,检查了重构中涉及的主要部分的执行流程,没有发现可疑点。系统占用的内存和以前一样,循环体被执行的次数和以前一样,和数据库之间的IO只有一次并且很快,问题到底会出在哪儿呢?最后我采用了最笨的办法,注释掉那些我认为可能是运行速度瓶颈的语句,然后逐步缩小怀疑的范围。最后我在循环的第四层找到了这个bug,这是一个不必要的对一个非常重型的方法的调用。要知道,在第三层循环中,只有不到5%的情况会进入出现bug的第四层循环,所以刚开始我一直没有怀疑到这里。但最后就是这倒霉的5%,却占用了整个系统运行时间的99.9%。
  说的有些罗嗦,其实道理很简单,恐怕也是我们在刚上大一大二的时候就学过的,那就是不要在循环体内放太耗时间的语句。可惜当自己接触的东西多了,反而把这样最基本的原则都忘了,写代码的时候不够谨慎,对循环体内的方法调用很少考量其执行效率。

  把这个东西放到提问区,是想问问各位大牛,.net下面有没有比较轻量级的动态测试工具,能够分析出给定代码块的执行瓶颈?(比如,给出每个语句的执行时间百分比。)

转载于:https://www.cnblogs.com/xingyukun/archive/2007/06/14/783195.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值