社区
Qt
帖子详情
一个很简单的程序,内存瞬间泄露100M。求助
JCJC错别字检测-田春峰
领域专家: 编程技术技术领域
2012-03-15 12:25:00
我用QTConcurrent::run 执行了一个成员函数,里面是一个for循环。
如果for循环不被打断,他会不停的emit字符串到主线程。
主线程只是简单的在UI显示emit过来的字符串。
现在这个程序疯狂的内存泄露!我找不出来。
更奇怪的是:我这个写法在第一次编译的时候是正常的,并且发布了。在第三方机器上也是可以运行的。
谁碰到过类似问题吗?
感兴趣我可以提供源代码!
多谢
...全文
375
14
打赏
收藏
一个很简单的程序,内存瞬间泄露100M。求助
我用QTConcurrent::run 执行了一个成员函数,里面是一个for循环。 如果for循环不被打断,他会不停的emit字符串到主线程。 主线程只是简单的在UI显示emit过来的字符串。 现在这个程序疯狂的内存泄露!我找不出来。 更奇怪的是:我这个写法在第一次编译的时候是正常的,并且发布了。在第三方机器上也是可以运行的。 谁碰到过类似问题吗? 感兴趣我可以提供源代码! 多谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
JCJC错别字检测-田春峰
2012-03-16
打赏
举报
回复
jdwx1,dext 一并谢过。
"之所以有这样的问题,可能是楼主 对线程和 QtConcurrent 类的理解还不够。",多谢提示。
由于不是最终产品,所以退出的问题我暂时没有考虑,而且会启动多个Run线程。
“主要是for的速度比刷新UI的速度快很多,导致有很多的QString对象存在。”
这是我感到怪异的地方, 因为同样的代码,第一次编译出来就可以正常运行,没有很多QString对象的情况。
另外,同样的代码,在mac上运行的很好。这也是我感到怪异的第二个地方。 我是在mac上写好,感觉可以运行,才在windows上编译的。(第一次正常,并且我现在保留了exe,第二次以后就内存狂增了。)
感谢两位,我再调试一下。
jdwx
2012-03-16
打赏
举报
回复
[Quote=引用 11 楼 dext 的回复:]
在 emit 后 加一句 Sleep(50);
当然 还要引用 #include<windows.h>
Linux 下的话,可以 写一个 类 继承于 QThread,然后 把 Sleep public 了。
之所以有这样的问题,可能是楼主 对线程和 QtConcurrent 类的理解还不够。
当然,你的程序还有别的问题, 因为 程序的退出码 并不是 0.
[/Quote]
主要是for的速度比刷新UI的速度快很多,导致有很多的QString对象存在。
JCJC错别字检测-田春峰
2012-03-16
打赏
举报
回复
jdwx1,dext
方便私信联系吗?
这个问题很诡异,希望能当面请教一下,顺便我给你们2份源代码看看。都是很简单的代码。
但效果差异很大。
所以希望能直接聊 :-)
dext
2012-03-16
打赏
举报
回复
在 emit 后 加一句 Sleep(50);
当然 还要引用 #include<windows.h>
Linux 下的话,可以 写一个 类 继承于 QThread,然后 把 Sleep public 了。
之所以有这样的问题,可能是楼主 对线程和 QtConcurrent 类的理解还不够。
当然,你的程序还有别的问题, 因为 程序的退出码 并不是 0.
JCJC错别字检测-田春峰
2012-03-15
打赏
举报
回复
代码在这里:
http://www.qtcn.org/bbs/read-htm-tid-48073.html
dext
2012-03-15
打赏
举报
回复
单从你给的这两句来说 没什么问题。
需要你的 connect代码 和 更多信息。
[Quote=引用 8 楼 accesine960 的回复:]
源代码如下:
for:
for(int i=0; i < 100000 ;i ++){
QString abc();
abc.setNum(i);
emit signal_int( abc );
}
slot:
void abc::slot_int(const QString & abc){
label.setText(a……
[/Quote]
JCJC错别字检测-田春峰
2012-03-15
打赏
举报
回复
源代码如下:
for:
for(int i=0; i < 100000 ;i ++){
QString abc();
abc.setNum(i);
emit signal_int( abc );
}
slot:
void abc::slot_int(const QString & abc){
label.setText(abc);
}
如果注释掉emit后,内存就不泄露了。
JCJC错别字检测-田春峰
2012-03-15
打赏
举报
回复
没有内存泄露,只要停掉:emit 和 slot 。就正常了。
[Quote=引用 1 楼 cpio 的回复:]
直接调用那个函数而不用QTConcurrent::run有没有内存泄漏?
[/Quote]
修行中
2012-03-15
打赏
举报
回复
for循环贴出来看看,还有slot函数
JCJC错别字检测-田春峰
2012-03-15
打赏
举报
回复
我在for中emit到UI线程的是 QString。
UI线程需要delete掉这个QString吗?
[Quote=引用 3 楼 slotlovesignal 的回复:]
引用楼主 accesine960 的回复:
我用QTConcurrent::run 执行了一个成员函数,里面是一个for循环。
如果for循环不被打断,他会不停的emit字符串到主线程。
主线程只是简单的在UI显示emit过来的字符串。
现在这个程序疯狂的内存泄露!我找不出来。
更奇怪的是:我这个写……
[/Quote]
情歌而已
2012-03-15
打赏
举报
回复
还有一种可能,你的connect函数没有加Qt::UniqueConnection选项,然后越连越多
情歌而已
2012-03-15
打赏
举报
回复
[Quote=引用楼主 accesine960 的回复:]
我用QTConcurrent::run 执行了一个成员函数,里面是一个for循环。
如果for循环不被打断,他会不停的emit字符串到主线程。
主线程只是简单的在UI显示emit过来的字符串。
现在这个程序疯狂的内存泄露!我找不出来。
更奇怪的是:我这个写法在第一次编译的时候是正常的,并且发布了。在第三……
[/Quote]
你显示用的ui是new的,而且还没销毁
zhu_xz
2012-03-15
打赏
举报
回复
[Quote=引用楼主 accesine960 的回复:]
更奇怪的是:我这个写法在第一次编译的时候是正常的,并且发布了。在第三方机器上也是可以运行的。
[/Quote]
你的意思是第一次编译的时候没有内存泄漏,但后来就有了?
是不是你后来不小心在哪里new了点东西没释放?
cpio
2012-03-15
打赏
举报
回复
直接调用那个函数而不用QTConcurrent::run有没有内存泄漏?
记一次
内存
溢出问题的排查、分析过程及解决思路
起因 这个测试工具的开发已有一段时间了,由于数据量过大,写入数据较慢,导致工具执行耗时较长,所以再次优化了实现方案,进行二阶段的
程序
开发。 经优化后,2000 条数据写入,耗时4秒,个人感觉,快了很多了。 于是,想批量执行下,看下耗时多长。 结果10分钟、20分钟、1 个小时过去了…
程序
一直在写入数据,等的我这个蓝瘦呀,寻思去泡杯茶吧。 心里过程 虽然,作为
一个
测试喵,编码能力与纯开发相比,根本不是
一个
层次的。 当然,也可以通过
求助
开发同事解决,但这并不是退缩、逃避解决问题的理由。 这个报错,我也是第一
如何解决 OutOfMemoryError
内存
溢出 —— 原因、定位与解决方案
Java
程序
出现 OutOfMemoryError(OOM)是常见且恼人的问题。它可能是 JVM 堆不足、
内存
泄漏、或者本地/直接
内存
耗尽引起的。本文用通俗的语言解释 OOM 的常见类型、如何快速定位(命令与工具)、以及 2 个可运行的 Demo(
一个
“
瞬间
分配大对象”触发 OOM,
一个
“
内存
泄漏”模拟)来复现和验证问题,并给出实际修复建议与最佳实践。
Win XP
内存
优化
一、Windows XP优化 恢复Windows经典界面 常用软件专题 很多人安装了Windows XP后的第一感觉就是Windows变得漂亮极了。只是可惜美丽的代价要耗掉我们本就不富裕的
内存
和显存。要想恢复到和经典Windows类似的界面和使用习惯,请在桌面上单击鼠标右键,选择“属性”命令即可进入“显示属性”的设置窗口。这里共有“主题”、“桌面”...
2024知识总结
从结构,查询(字段、key)、事务、存储(磁盘、
内存
),聚合操作(avg,sum,max,min)关系型数据库:主流有mysql、Oracl、sqlServer。以列和行的结构方式存储数据,可以
简单
理解为二维表格模型,表中的数据可以和其他表的列进行关联;采用DQL结构语句进行数据查询,根据表字段查询;支持事务操作,事务支持4大特性,分别是原子性,一致性,隔离性,持久性;数据保存具有强一致性,将数据保存在磁盘中。
【
程序
猿的小幽默】
在论坛里看到的,感觉很有意思,
Qt
21,475
社区成员
26,692
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章