您的位置:首页 > 编程语言

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

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

把这个东西放到提问区,是想问问各位大牛,.net下面有没有比较轻量级的动态测试工具,能够分析出给定代码块的执行瓶颈?(比如,给出每个语句的执行时间百分比。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐