高分求教!delphi ADO控件发生内存泄漏! ( 积分: 200 )

  • 主题发起人 主题发起人 mrduan
  • 开始时间 开始时间
M

mrduan

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个空白工程中只加入如下单元:
DB, ADODB, DBClient,DBCtrls

使用CheckMem.pas检测内存泄露,编译运行,打开窗口后立即关闭,checkmem的日志结果如下:

===== Project1.exe,2007-10-30 20:44:57 =====

可用地址空间 : 1024 KB(1048576 Byte)
未提交部分 : 1008 KB(1032192 Byte)
已提交部分 : 16 KB(16384 Byte)
空闲部分 : 13 KB(14004 Byte)
已分配部分 : 2 KB(2048 Byte)
全部小空闲内存块 : 0 KB(236 Byte)
全部大空闲内存块 : 5 KB(5772 Byte)
其它未用内存块 : 7 KB(7996 Byte)
内存管理器消耗 : 0 KB(332 Byte)
地址空间载入 : 0%

当前出现 1 处内存漏洞 :
0) 0000000000DA1FC4 - 135($0087)字节 - 不是对象
----------------------------------------------

哪位大侠能搞定啊?!指条生路也行啊。。
 
用免费的MemProof,在Project的编译选项中选中TDebug32 Info,就能定位到泄漏的行。
不过,我建议还是用AQTime,即便是MemProof也有误报的问题——我前几个月被害惨了。
 
谢谢creation-zy的回复

我下载了AQTime,测试结果显示:
Object name为:Reserved Virtual Memory.497,有一Size为16384的内存泄露。
如何在源代码中找到这一位置啊?
 
再次强调——你必须在Project的编译选项中选中TDebug32 Info,附加的检测工具才能定
位到源码。
AQTime的操作比较复杂,你应该仔细的阅读帮助,而MemProof的使用就简单的多了(在手
工指定了源码搜索路径之后,就会定位到泄漏发生的源码行):)
不过,根据我的经验,如果只是引用了标准单元,就不会出现泄漏。除非你在程序中进行
了创建或者New、GetMem、SetLength之类的操作。
 
看来我得试试MemProof。用AQTime虽然在Project的编译选项中选中了include TD32 debug info,但却不知道如何定位源码。。 :-(
 
刚才网络出了点问题。
已经结贴!虽然最终问题没有解决,但基本思路清楚了,谢谢creation-zy![:)]
 
后退
顶部