社区
Qt
帖子详情
一个很简单的程序,内存瞬间泄露100M。求助
JCJC错别字检测-田春峰
领域专家: 编程技术技术领域
2012-03-15 12:25:00
我用QTConcurrent::run 执行了一个成员函数,里面是一个for循环。
如果for循环不被打断,他会不停的emit字符串到主线程。
主线程只是简单的在UI显示emit过来的字符串。
现在这个程序疯狂的内存泄露!我找不出来。
更奇怪的是:我这个写法在第一次编译的时候是正常的,并且发布了。在第三方机器上也是可以运行的。
谁碰到过类似问题吗?
感兴趣我可以提供源代码!
多谢
...全文
413
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有没有内存泄漏?
eBPF与BCC实战:零开销实时追踪C/C++
内存
泄露
内存
管理是C/C++开发的核心基础,
内存
泄露
则是其中最常见且棘手的顽疾之一。其原理在于
程序
动态分配的
内存
未能正确释放,导致系统可用
内存
被持续蚕食,最终引发性能下降甚至崩溃。传统工具如Valgrind虽能检测,但巨大的性能开销使其难以应用于生产环境。eBPF技术通过在内核安全沙盒中运行验证过的
程序
,以近乎零损耗的方式动态追踪系统事件,实现了高性能的实时观测。基于eBPF的BCC工具箱提供了memleak等利器,能够挂钩malloc、free等
内存
操作,精准统计未释放的分配及其调用栈。这项技术的核心价值在于,它
【Java开发300个实用技巧】106.方法区OOM动态类
泄露
本文探讨了Java方法区(元空间)
内存
溢出(OOM)问题,特别是由动态类生成引发的
内存
泄露
。文章首先解释了方法区OOM的原因,指出动态生成的类若无法回收,会导致
内存
耗尽。接着,分析了常见的动态类
泄露
场景,如CGLIB动态代理和Groovy脚本引擎的滥用,并提供了相应的优化策略。此外,文章介绍了诊断工具如VisualVM、JCMD和MAT,帮助开发者定位和解决问题。最后,提出了预防措施,包括合理配置元空间大小、监控类加载和使用代码规范检测工具。通过理解问题、使用正确工具和遵循最佳实践,开发者可以有效避免方法区
记一次
内存
泄漏问题的排查经历
源宝导读:随着系统越来越庞大,越来越复杂,疑难杂症问题也越来越多。本文将介绍明源研发协同平台团队针对一次
内存
泄露
问题的排查过程和技术探索。 一、背景
内存
泄漏,
一个
说大不大说下不小的瑕疵。作为开发者,我们都很清楚
内存
泄漏是我们代码问题导致的。但是话说回来,泄漏后果会很严重嘛?这不好说,如果对服务器
内存
的影响只有几个百分点,又或者对应用没有什么致命影响,那么修补
内存
泄漏就像鸡肋一样,...
Java中Groovy脚本执行引发的MetaSpace
内存
泄露
分析与解决方案
在Java应用开发中,动态脚本执行是扩展系统灵活性的常见需求,Groovy作为JVM上的动态语言,因其与Java的无缝集成和强大的动态能力被广泛应用于规则引擎、工作流和插件系统等场景。其核心原理是通过GroovyClassLoader动态编译脚本为Java类并加载到JVM的MetaSpace(元空间)中。然而,若ClassLoader生命周期管理不当,动态生成的类及其元数据将无法被垃圾回收,导致MetaSpace
内存
持续增长直至OOM,这就是典型的
内存
泄露
问题。该问题的技术价值在于揭示了JVM类加载与卸载机
避免浏览器
内存
泄露
最近做RIA,因为涉及到大数据量处理,担心出现
内存
泄漏,于是花了一段时间,从了解到处理,有些心得,在这
简单
做个总结。
内存
泄漏通俗的说:使用者认为是垃圾,而浏览器认为不是,出现了误会,资源便浪费了。而数据是否被引用是系统判断是否垃圾的依据,所以一切引起垃圾的根源就是错误的引用,解决JavaScript
内存
泄漏问题的根本就是避免错误引用。
内存
泄漏方式我分成三类:公共变量未释
Qt
21,502
社区成员
26,693
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章