关于内存泄露。。。(100分)

  • 主题发起人 主题发起人 ranyang
  • 开始时间 开始时间
R

ranyang

Unregistered / Unconfirmed
GUEST, unregistred user!
系统主要是通过socket接数据,解析数据,写数据库(用Access的mdb格式数据库),读数据库,根据数据绘图。最开始运行还正常`,但是运行一个晚上后,运行速度开始缓慢!cpu耗费达到90%。。。为什么会这样!!!我停掉程序,清空数据库,再运行,又可以了。。但是随着运行时间越长,cpu的占用就越来越高。。。是什么情况呢!!
 
应该是内存堆积,你看看,当程序运行变慢的时候,你的应用程序占用内存比刚开始的时候,有什么大的变化?如果内存使用变得很大,那就是你的程序有不合理的地方,具体不好说,只有自己逐个模块调测一下,或者使用工具察看。
 
我感觉是不是数据库数据的增加,造成检索的时间增加,占得cup也就增加了,
如果可以试试建立一些索引看看。
 
数据库记录增加,在检索上是会导致时间的变化,但是不应该出现占用大量的cpu啊,这种情况下应该是内存占用多,而cpu的占用主要出现于一直在循环处理某一事件!
 
可用地址空间 : 1024 KB(1048576 Byte)
未提交部分 : 976 KB(999424 Byte)
已提交部分 : 48 KB(49152 Byte)
空闲部分 : 45 KB(46588 Byte)
已分配部分 : 2 KB(2212 Byte)
全部小空闲内存块 : 8 KB(8628 Byte)
全部大空闲内存块 : 37 KB(37960 Byte)
其它未用内存块 : 0 KB(0 Byte)
内存管理器消耗 : 0 KB(352 Byte)
地址空间载入 : 0%

当前出现 5 处内存漏洞 :
0) 0000000000F2165C - 67($0043)字节 - 不是对象
1) 0000000000F21F78 - 135($0087)字节 - 不是对象
2) 0000000000F2DDE0 - 35($0023)字节 - 不是对象
3) 0000000000FA4B20 - 43($002B)字节 - MS Sans Serif : TFont (36 字节) - In Graphics.pas
4) 0000000000FA4720 - 43($002B)字节 - MS Sans Serif : TFont (36 字节) - In Graphics.pas
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这个是我侧出来的,但后面那两个是什么意思??
 
用了多线程吗?是不是这个的问题。
 
对!用了!
 
你试一试关闭程序,然后不要清空数据库,再次运行,看看运行速度,若正常,则跟数据库无关,若慢,那么是你的数据量太大,需要优化,或更换数据库。
 
Graphics.pas 里面的字体没有释放,我感觉那些所谓的内存泄漏检测的unit并不能给内存泄漏的避免带来更多的提示。
应该是你的代码里面有什么临时的变量没有释放的问题
 
我找了很久!没有找到呀!
 
根据数据绘图 <<-- 觉的问题可能出在这里。
数据量大了之后绘图是很耗CPU资源的,如果你每次数据更新后都需要重绘,那CPU占用率肯定低不了。建议你暂停绘图再测试一下。确定问题出在这里的话想办法改进这部分的代码。
 
楼上的建议对我很有启发!!
 
多人接受答案了。
 

Similar threads

回复
0
查看
867
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
850
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
782
SUNSTONE的Delphi笔记
S
后退
顶部