开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 9915|回复: 14
收起左侧

[已回应] E语言内存泄漏BUG反馈

[复制链接]
结帖率:33% (1/3)
发表于 2014-8-5 19:18:11 | 显示全部楼层 |阅读模式   天津市天津市
本帖最后由 萧阳天 于 2014-8-5 22:24 编辑

声明下 环境:  本人学习E4个月了,时间不长,在校期间有C基础。但根据判断,可以断定为是BUG
软件环境:WINXP,加载官方全支持库,加载ET助手支持库最新,加载常量支持库1.6版
调试环境:虚拟机WINXP,纯净环境(无其它冲突程序软件),E5300 CPU 分配1G内存

开发的软件大概作用,取屏幕点色,判断进行程序报警,运用于长期运行环境(挂机类型)

源码BUG结构: 时钟→启动线程→子程序→执行屏幕取点色(采用API方式)

PS 内存泄漏:程序运行过程中,申请的内存,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏(来在百度百科)。该部分内存 根据其它资料意思为:无任何指针 指向,导致系统无法控制该区域内存,直至程序自身结束,才得到释放(有错误希望指明)。

上源码:


.版本 2
.支持库 EThread
.支持库 OPenGL
.支持库 spec

.程序集 窗口程序集1
.程序集变量 取线程句柄, 整数型

.子程序 __启动窗口_创建完毕

时钟1.时钟周期 = 100

.子程序 _时钟1_周期事件

启动线程 (&子程序1, , 取线程句柄)
' 子程序1 ()  解决方案,不采用启动线程。至于用多线程模块,一没找到,二是感觉模块原理应该是一样的。所以未采用模块方式运行多线程

.子程序 子程序1
.局部变量 a, 整数型
.局部变量 b, 整数型
.局部变量 m, 整数型

.计次循环首 (10, )
    a = GetDesktopWindow ()
    b = GetWindowDC (a)  ' 此段也可用   a=getdc(0)
    m = GetPixel (b, 500, 100)  ' 此段也可用  m = GetPixel (a, 500, 100)
    a = 释放设备句柄 (a, b)  ' 此段也可用 ReleaseDC (0, a)

    调试输出 (a)  ' 说明释放内存成功了,但运用启动线程的方法依然存在内存泄漏

.计次循环尾 ()

强制结束线程 (取线程句柄)  ' 在此说明下,线程自已运行完会自动结束,其实没必要强制结束(线程死循环除外),其它资料对此有争议,本人做了测试。结果是自动释放


大大们, 希望测试我的源码,看下你的任务管理器,程序内存是在一直增加哟,一直加加加加,我想运行一天,你的电脑内存配置不高会报错的~~ 方案已经找到不用启动线程,直接等待子程序运行完。希望我发现的没有错,是个问题,希望更新版本时改进,如何有错,希望大大能指明。

http://bbs.125.la/thread-13725657-1-1.html   这是另一个无用贴,为了提高结贴率,大大们管理员帮忙关了吧~
QQ截图20140805191223.png

本帖被以下淘专辑推荐:

结帖率:100% (1/1)
发表于 2014-8-5 19:57:43 | 显示全部楼层   内蒙古自治区包头市
本帖最后由 V雪落有声V 于 2019-4-22 12:00 编辑

楼主的代码写法和逻辑存在严重错误!下面我就来分析这些错误。

代码书写错误:
首先,我来贴出楼主自己代码书写错误而造成的泄漏的两处: daan.jpg
在上面的代码中已经全部写明白了。

不要使用例如:强制结束线程,强制结束XX类的命令,这些命令一旦使用,多少都会造成内存或者句柄泄漏。
第一处,楼主没有释放线程句柄,这个会导致“句柄数”一直上升。
第二处,虽然已经是线程结尾,但是系统仍然要做一些工作。这里也不能直接结束线程。
--------------------------------------------------------------------------------------------------
逻辑错误:


首先:我们列出来已知条件;
1.时钟周期为:100。也就是说,每个100毫秒就会启动一个新的线程来执行“子程序1”。
2.通过单步计时调试,得出:“子程序1”完整运行一次的时间>100毫秒。
3.经测试,“子程序1”中的代码并不存在泄漏情况。
得出的结论是:并不是代码中(上图的经过修改的代码)存在内存泄漏,而是,新启动的线程不能在100毫秒内执行完毕,造成了:前面的线程没有执行完毕,后面的线程又启动了,所以这并不是内存泄漏,而是线程运行与管理不当造成的。
从任务浏览器中观测到的数据结果是,“线程”一栏不断飙升,随之伴随有内存的升高。这并不是泄漏,而是线程的内存。
解决方案:将时钟周期设置为600左右,(根据调试时平稳的线程数目为准);
---------------------------------------------------------------------------------------------------

点评

大神,怎么算代码的执行速度啊?   广东省广州市  发表于 2014-8-5 20:51

评分

参与人数 2精币 +2 收起 理由
linge700 + 1 感谢分享,很给力!~
474080434 + 1 奉上小小红包希望笑纳

查看全部评分

回复 支持 1 反对 0

使用道具 举报

结帖率:50% (4/8)
发表于 2020-6-9 16:25:59 | 显示全部楼层   福建省三明市
萧阳天 发表于 2014-8-5 22:24
100毫秒启动一个线程对子程序(未加任何保护)进行操作,创建句柄未关闭会一直累加肯定会崩溃。虚拟机XP测 ...

大神,可以帮我看下我的问题贴错在哪么,万分感谢!
回复 支持 反对

使用道具 举报

结帖率:50% (4/8)
发表于 2020-6-9 16:23:41 | 显示全部楼层   福建省三明市
V雪落有声V 发表于 2014-8-5 19:57
楼主的代码写法和逻辑存在严重错误!下面我就来分析这些错误。

代码书写错误:

大神,大神,可以帮我看下我问题贴里的问题么。万分感谢!
回复 支持 反对

使用道具 举报

结帖率:33% (1/3)
 楼主| 发表于 2014-8-6 18:40:34 | 显示全部楼层   河南省郑州市
萧阳天 发表于 2014-8-5 22:24
100毫秒启动一个线程对子程序(未加任何保护)进行操作,创建句柄未关闭会一直累加肯定会崩溃。虚拟机XP测 ...

嗯嗯,最近就深入测试学习E的多线程方面的知识。以前在学校的基础在实际操作中还是有差距的。100毫秒启动一个线程对子程序,如何限制一个子程序100ms还是不了解怎么执行。自寻方法中
回复 支持 反对

使用道具 举报

结帖率:100% (9/9)
发表于 2014-8-5 22:24:26 | 显示全部楼层   广东省东莞市
100毫秒启动一个线程对子程序(未加任何保护)进行操作,创建句柄未关闭会一直累加肯定会崩溃。虚拟机XP测试正常情况下是句柄数为57,线程数为2左右。
建议你还是多学习多线程操作。
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2014-8-5 21:35:10 | 显示全部楼层   内蒙古自治区包头市

把要测试的代码单独拿出来,然后单独运行他,看看他所用的时间
回复 支持 反对

使用道具 举报

发表于 2014-8-5 20:02:30 | 显示全部楼层   福建省宁德市
474080434 发表于 2014-8-5 19:52
呵呵是么? 别看 时钟短和 循环多。不用启动线程,程序运行10秒就不会再吃内存喽哟。但是用启动线程那内 ...

汗,这不明显吗?,时钟加循环=无限循环
回复 支持 反对

使用道具 举报

结帖率:33% (1/3)
 楼主| 发表于 2014-8-5 19:52:47 | 显示全部楼层   天津市天津市
有人吗 发表于 2014-8-5 19:35
呵呵,楼主,这个明显看上去就是占内存的代码啊

呵呵是么? 别看 时钟短和 循环多。不用启动线程,程序运行10秒就不会再吃内存喽哟。但是用启动线程那内存可是不停的涨
回复 支持 反对

使用道具 举报

发表于 2014-8-5 19:35:12 | 显示全部楼层   福建省宁德市
呵呵,楼主,这个明显看上去就是占内存的代码啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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