• 8213阅读
  • 19回复

想一起讨论一下,面向对象的思想做GUI,怎样占内存比较少? [复制链接]

上一主题 下一主题
离线netlove
 

只看楼主 倒序阅读 楼主  发表于: 2008-09-25
— 本帖被 XChinux 执行加亮操作(2008-09-25) —
  比如利用QT做的GUI,功能比较庞大,大约有2万行代码吧,这种情况下,是在启动的时候把大部分的对象实例化还是变运行边实例化,占用内存少?便运行边实例画的话,一是感觉慢。第二个我感觉就是总是不停的new 和delete,会不会有很多内存碎片?我对这方面不是很懂。毕竟嵌入式的内存不是很大,所以想一起讨论一下
离线sbtree
只看该作者 1楼 发表于: 2008-09-25
要想少占空间,就要牺牲时间,这是一个永恒的真理,而且符合相对论的时空理论r^2+c^2*t^2 = const 
windows 7 + VC++2008 + Qt4.5.2
离线netlove

只看该作者 2楼 发表于: 2008-09-26
唉,这个我知道啊,可惜公司即要求占内存少,还要求运行效率高,郁闷死拉到。现在考虑把常用的窗口类启动时实例化,不常用的用的时候实例化,用完销毁。真是郁闷,公司就我自己做GUI,整天面对一堆用C做底层驱动的,他们的要求高的你没法接受,直接用C的思维来要求你
离线rockyluo

只看该作者 3楼 发表于: 2008-09-26
“是在启动的时候把大部分的对象实例化还是边运行边实例化”
确实值得探讨!!!!!
我跟你一样也是一个人在做GUI,只不过现在刚搭建起程序的基本框架,功能界面都能跳转了,2000来行的代码量
当初按照“边运行边实例化”做的,现在要细化,很多代码实现起来很是麻烦,因为很多地方想调用部件的时候那些部件都没实例化,很是头疼!
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线lenovosoft
只看该作者 4楼 发表于: 2008-09-26
个人倾向“边运行边实例化”,开始时只显示一个界面即可。
离线netlove

只看该作者 5楼 发表于: 2008-09-26
我刚开始做的时候就是边运行边实例化,结果做完了测试说慢,其实我也没感觉非常慢,就是一点的时候一顿,然后出来,公司嫌慢,后来之后全实例化完,出来的速度是很快了,又嫌占内存大,唉,还有个用C做硬件驱动的前辈非让我改MINIGUN做,说那个是纯C的,肯定效果好。郁闷的我够呛,我个人觉的虽然GUI的开发包是相通的,但是几人选择了一个,起码要熟练了才能乱跳啊,要不然这个说就搞这个,那个说就搞那个,不什么都学不到了。后来没办法想离开公司,然后公司又说用QT了。
  但是现在升级版的东西要求架构必须全变,既要运行效率,又要占内存少。真是搞的头痛。
离线netlove

只看该作者 6楼 发表于: 2008-09-26
说错了,是MINIGUI,不知道有哪位用过这个,不知道效果如何?
离线rockyluo

只看该作者 7楼 发表于: 2008-09-26
边运行边实例化其实显示也不慢啊~~
我开始切换界面的时候也是一顿一顿的~~~
后来在界面切换的时候改了改  也就是先show新的  再delete旧的,现在程序跑的很正常!
要说这也不是什么大不了的,但是不晓得仁兄注意到这个没有?
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线netlove

只看该作者 8楼 发表于: 2008-09-26
是这样做的,不过我的程序里面需要的图片数量比较多,所以也影响了效率。不知道各位图片是怎么处理的。
离线sbtree
只看该作者 9楼 发表于: 2008-09-26
这需要好好研究研究算法了,比如操作系统的调度算法可以参考参考
windows 7 + VC++2008 + Qt4.5.2
离线rockyluo

只看该作者 10楼 发表于: 2008-09-26
我的图片全用QLabel加载来显示     
你自己怎么处理的?
抑或其它仁兄有什么好方法?
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线netlove

只看该作者 11楼 发表于: 2008-09-26
我所有的部件全都有图片。所以无所谓用什么来加载显示了。所有的类都是由自己通过Qt原有的类派生来的,所有的部件都加上了图片,在类里面就加上了。我现在考虑,所有的底图就用管理窗口那一张图,这样可以不用加载很多图片,直接按照父子关系得到,还有就是可以实现给管理窗口换皮肤,所有的都换皮肤的功能
离线netlove

只看该作者 12楼 发表于: 2008-09-26
TO:sbtree
操作系统的调度算法?我对这方面不是很熟悉。这个实现思路是什么样的呢?
离线sbtree
只看该作者 13楼 发表于: 2008-09-26
引用第12楼netlove于2008-09-26 17:53发表的  :
TO:sbtree
操作系统的调度算法?我对这方面不是很熟悉。这个实现思路是什么样的呢?

调度算法有很多种,比较常见的就是关于进程优先级别的算法,原理很简单就是高级别的进程优先执行,我在这里提到,只是看看楼主可不可以借鉴,让这种思想应用在自己的程序里,你也可以google一下,能找不少更详细的介绍
windows 7 + VC++2008 + Qt4.5.2
离线codespy
只看该作者 14楼 发表于: 2008-09-26
引用第11楼netlove于2008-09-26 17:48发表的  :
我所有的部件全都有图片。所以无所谓用什么来加载显示了。所有的类都是由自己通过Qt原有的类派生来的,所有的部件都加上了图片,在类里面就加上了。我现在考虑,所有的底图就用管理窗口那一张图,这样可以不用加载很多图片,直接按照父子关系得到,还有就是可以实现给管理窗口换皮肤,所有的都换皮肤的功能

你不会是存储了原始尺寸的图片吧?比如显示16*16的图片,而实际存储的是32*32的原始图片。
离线netlove

只看该作者 15楼 发表于: 2008-09-27
引用第14楼codespy于2008-09-26 21:45发表的  :
你不会是存储了原始尺寸的图片吧?比如显示16*16的图片,而实际存储的是32*32的原始图片。

不是的,所有的图片给我的时候都已经做的跟部件一样大小了,除非我要放大或缩小
离线netlove

只看该作者 16楼 发表于: 2008-09-27
现在还发现一个问题,我把新版的程序在板子上运行,分为便运行边实例化和全部实例化完成的两种方案,居然发现,两种情况下不点击界面任何菜单,占用内存显示都为0%,点击菜单的时候,两种情况下占的内存也一样,不同的是便运行边实例化的时候CPU占用率高。晕了
离线codespy
只看该作者 17楼 发表于: 2008-09-28
引用第16楼netlove于2008-09-27 10:52发表的  :
现在还发现一个问题,我把新版的程序在板子上运行,分为便运行边实例化和全部实例化完成的两种方案,居然发现,两种情况下不点击界面任何菜单,占用内存显示都为0%,点击菜单的时候,两种情况下占的内存也一样,不同的是便运行边实例化的时候CPU占用率高。晕了

没搞过嵌入式开发,不清楚嵌入式设备的内存限制。-_-!
在程序启动速度方面,用到时再实例化要比全部实例化要快。
在用到时再实例化这种情况下,弹出界面的时候会停顿一会儿(多少毫秒),那么再次弹出此界面时还停顿(多少毫秒)?
离线benkei

只看该作者 18楼 发表于: 2008-10-06
赫赫,我这里的更狠,几百个对话框,几万个控件。启动时全部实例化,超级慢的阿。自己也觉得受不了了。还是先初始化开始就显示的那几个,其它的等调用到了再说吧。第一次初始化是比较慢,后面再调出来就快了。
离线seekbone
只看该作者 19楼 发表于: 2010-01-13
mark
快速回复
限100 字节
 
上一个 下一个