QT程序内存占用咋这么吓人...

Toney_Ho 2012-02-16 07:59:09
前面写的一个多线程的TCP服务器,前面遇到的问题基本解决了;
但是发现程序启动就占25M内存,然后每来一个连接就创建一个线程,而平均每个线程占了9M左右内存!!!
我的个去,对于只有64M的开发板来说,伤不起啊....
和二十个客户端通信的时候CPU占用率高达98%,触摸屏基本不能响应了,我还想和一两百个客户端通信的呢,这可如何是好。通信完之后CPU占用率下去了,触摸屏可以响应,但是内存却一直占着,top了一下看到内存那儿写的是300%多...我优化了下程序,但没见有多大起色。。
随后我新建了一个基于mainwindow的空项目,什么代码都没加,直接编译在ARM板上运行,发现内存占用依然在20M左右,QT怎么能这样呢...我编译的是release版。
谁分享下经验,咋优化,咋解决...
...全文
4342 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
noodle123 2012-02-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 maximin 的回复:]

每来一个连接就创建一个线程

==》线程场景切换是非常耗资源的,乱开线程是个不好的习惯,其实很多情况下一个线程就能能搞定,乱开线程不是让程序跑快了,反而是跑慢了,在PC上一样。
[/Quote]
M与K之间确实相差很大。。。
maximin 2012-02-24
  • 打赏
  • 举报
回复
每来一个连接就创建一个线程

==》线程场景切换是非常耗资源的,乱开线程是个不好的习惯,其实很多情况下一个线程就能能搞定,乱开线程不是让程序跑快了,反而是跑慢了,在PC上一样。
Toney_Ho 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhu_xz 的回复:]
你的服务器需要图形界面吗?如果不需要,就不要包含QtGui,在工程文件中QT-=gui
[/Quote]

各位还有人在没有...程序是需要GUI的,有人我就放源码哦
Toney_Ho 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhu_xz 的回复:]
印象中Qt的socket消耗内存太过于严重了,好像是Qt自身的缺陷造成的,记不得有没有被fix了。你是用的哪个版本的Qt啊?我可以看看这个问题,如果还存在的话,我可以改Qt的这个bug。但如果内存没有被释放,是不是你的程序有内存泄漏啊?
但CPU的开销应该不至于太大才是。

至于最后说的问题,主要是因为一个简单的Qt GUI程序,会依赖很多系统库(建议你mmap一下看看都是那些library……
[/Quote]
我的开发环境:
开发环境:FC9;
运行环境:ARM9+linux-2.6.32
QT:4.7.0(32bit)
QT Creator:2.0.0
本地运行编译器:Qt 4.6.3 OpenSource Release
目标板运行编译器:qte4.6.2arm Release

我再修改下程序,要是没解决再把源码放上来.
Toney_Ho 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yiyaaixuexi 的回复:]
如果使用没有减裁的Qt库,空项目启动20M左右,我们一般都是减裁libQtGui.so,和一些没有用到的库,最后可以达到启动13M左右
[/Quote]
我看了一下,需要这些库:
0x00000001 (NEEDED) Shared library: [libts-0.0.so.0]
0x00000001 (NEEDED) Shared library: [libQtGui.so.4]
0x00000001 (NEEDED) Shared library: [libQtNetwork.so.4]
0x00000001 (NEEDED) Shared library: [libQtCore.so.4]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]
以前没有裁剪过库,是不是在编译生成libQtGui.so等这些库的时候就按照需求进行裁剪,再生成相应的库,放到开发板上,不过还是得十多M,还不知道有很多个客户端的时候会花多少内存。。。
youhao1999 2012-02-17
  • 打赏
  • 举报
回复
看来QT的缺点是很大呀
念茜 2012-02-17
  • 打赏
  • 举报
回复
如果使用没有减裁的Qt库,空项目启动20M左右,我们一般都是减裁libQtGui.so,和一些没有用到的库,最后可以达到启动13M左右
zhu_xz 2012-02-17
  • 打赏
  • 举报
回复
你的服务器需要图形界面吗?如果不需要,就不要包含QtGui,在工程文件中QT-=gui
yaokaei 2012-02-16
  • 打赏
  • 举报
回复
Qt的库好像是可以裁减的
法尔我给他 2012-02-16
  • 打赏
  • 举报
回复
关注一下,确实比较耗内存
zhu_xz 2012-02-16
  • 打赏
  • 举报
回复
对了,最好能够提供一个简单的程序,让我debug内存和CPU开销的问题
zhu_xz 2012-02-16
  • 打赏
  • 举报
回复
印象中Qt的socket消耗内存太过于严重了,好像是Qt自身的缺陷造成的,记不得有没有被fix了。你是用的哪个版本的Qt啊?我可以看看这个问题,如果还存在的话,我可以改Qt的这个bug。但如果内存没有被释放,是不是你的程序有内存泄漏啊?
但CPU的开销应该不至于太大才是。

至于最后说的问题,主要是因为一个简单的Qt GUI程序,会依赖很多系统库(建议你mmap一下看看都是那些library在那里),而且在QtGui中有太多的widgets在消耗内存(所以在Qt5里面widgets被独立成了一个单独的库)。

16,213

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧