注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

【解决】某程序运行越来越慢之原因分析  

2010-05-28 16:52:15|  分类: 疑难杂症 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

        某程序运行一段时间之后,速度越来越慢。

        经过大致的观察,得出三个疑点。

        (1)Flash控件导致的内存泄露?  程序中使用了Flash控件,并且大量使用了函数put_Movie,也就是,频繁地切换flash。而观察的结果是,内存增加较快。去除flash播放的功能之后,内存增加不是很明显了。

        结论:Flash控件可能导致了内存泄露!

        (2)去除Flash功能之后,内存依然小幅度增加!这说明,可能还是存在内存泄露的!而Debug跟踪的结果显示,或许并不存在内存泄露了!

        (3)链表增长问题。这是导致问题的根源!

         虽然,我还没有具体地分析代码,不过,从表象来看,链表节点增长是肯定的。在两次可逆的操作中,如(2)所述,内存小幅增加,这可能是链表增长导致的;在若干次可逆操作之后,程序越来越慢,这说明,链表节点太多,导致搜索效率下降!

        结论:从(2)和程序运行速度减慢两点,得出结论,链表不断增长,程序没有正确删除废弃的节点。

       

        解决!

        关于(1),个人认为这种可能性很小。flash控件本身是一个很稳定的控件,使用范围很广,所以,应该不会存在这种问题的。

        关于(2)(3),跟踪结果显示,这种观点是错误的。

        最后的结论。程序在运行一段时间后,搜索复杂度增加。于是,对搜索复杂度参数下内存断点,最后发现,是搜索复杂度这个参数被改变了!注释掉改变搜索复杂度参数值的代码,问题消除!

        那么,为什么内存耗用会小幅度增加了呢?首先,GDI对象等各种句柄是被完全回收了的,这里没有内存泄露!其次,堆内存也被完全回收,这里也不存在内存泄露。

        由此看来,只有一种可能性:内存碎片。对于这种情况,可以不予考虑,毕竟不是大型的应用,些许碎片不影响功能。

 

By:zhanyonhu

  评论这张
 
阅读(952)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016