Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 5724|回复: 12

Lazarus1.1 FPC2.61 WinCE6 下的内存泄漏

[复制链接]

该用户从未签到

发表于 2013-1-31 18:05:10 | 显示全部楼层 |阅读模式
最近为Lazarus的内存泄漏伤透了脑筋。

建一个空白的Form,加上-gh开关,直接编译后到WinCE6下面运行,关闭Form的时候直接报内存泄漏的错误。不知何故?
更甚者,在Form上面加一个Timer,每1秒钟打开一次SQLQuery.Open(当然会有数据返回的),然后在下一次打开前SQLQuery.Close,依次循环。结果也会导致大量的内存泄漏,检查GlobalMemoryStatus(MS)的MS.dwAvailPhys可以发现每几次Timer都会导致4K或4K以上的内存泄漏。如果SQLQuery返回的数据集越多,泄漏也就越严重,直到程序自动被关闭。

不知其他大侠有没有遇见这样的情况,我该如何处理?万分感谢!
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-1-31 18:08:24 | 显示全部楼层
顺便补充一下,我的SQLQuery返回的数据集大约有1000条记录,FieldCount大约有20。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-2-4 17:21:19 | 显示全部楼层
用 0.9.28 版本来编译wince的程序,看看有没有这样的情况。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-5-8 22:23:09 | 显示全部楼层
最近被内存泄露的问题,搞得头疼。如果在一个空白的Form里面,创建一个Thread,然后正常结束该Thread(比如Thread.FreeOnTerminate := True; Thread.Terminate;),如果加了-gh编译开关编译执行的话,将会报90多块内存泄露;如果不用FreeOnTerminate,而是Thread.Terminate; Thread.Waitfor; FreeAndNil(Thread);则直接报数百个块泄露。不知道什么道理。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-5-8 22:28:53 | 显示全部楼层
如果一个空白Application中只有一个空白Form,加上-gh编译开关后到WinCE运行,关闭的报告3块内存泄露。如果在这个Form上面加1个图形控件,关闭的时候则报4块内存泄露,加N个图形控件则报N+3块内存泄露。如果在Form直接Create一个TComponent或者TControl后立即Free,则泄露的内存数不会增加。如果Create一个TWinControl,但是不设置其Parent属性就直接Free,系统关闭的时候泄露的内存也不会增加。如果Create一个TWinControl,但是设置了其Parent属性,则系统关闭的时候泄露的内存块数会加1的。不知何故?
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-5-8 22:32:14 | 显示全部楼层
以上问题,非常好验证。不知道哪位大侠,能否指点迷津?非常感谢!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-5-10 16:03:39 | 显示全部楼层
ejiemu 发表于 2013-5-8 22:32
以上问题,非常好验证。不知道哪位大侠,能否指点迷津?非常感谢!

不要加 -gh 参数
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-5-13 13:14:29 | 显示全部楼层
谢谢,如果不加-gh参数 通过什么办法来检测Lazarus自身的内存泄露问题呢?
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-5-13 13:22:06 | 显示全部楼层
而且我怀疑 Lazarus 在WinCE下面 出现内存泄露。目前我在WinCE下面的一个应用不太稳定,每天会出现几次死机现象,不知道是不是和这个有关系?
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-5-13 13:51:49 | 显示全部楼层
现在我用Lazarus0.9.28、0.9.28.2、0.9.30版本下面都测试过了,不管是加-gh,还是直接在program的uses后面直接加Heaptrc,空白的窗口,关掉后,就会报告丢失2 unfree memory blocks 152
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2024-3-19 15:34 , Processed in 0.033144 second(s), 10 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表