• 20042阅读
  • 27回复

Qt的运行速度太糟糕了! [复制链接]

上一主题 下一主题
离线codespy
 
只看楼主 正序阅读 楼主  发表于: 2008-09-03
— 本帖被 XChinux 执行加亮操作(2008-09-03) —
demo里的interview这个例子的处理速度都让人吃惊,原来Qt的运行速度这么差!
当这个interview例子的窗口最大化,然后展开上百个条目的时候,速度慢的惊人。相比之下,XP的资源管理器快的多。
那个interview例子就是Qt在搬起石头砸自己的脚!
后来我用QDirModel和QTreeView编写了一个资源管理器,结果也是慢的出奇,展开一个目录要一秒左右的时间!有的时候根本慢到不相应鼠标事件了。
总之性能是Qt的一个软肋!
离线ogred3d
只看该作者 27楼 发表于: 2012-08-14
快速拖动卡是有,
Qt
离线狼跃冲顶

只看该作者 26楼 发表于: 2012-03-15
恰恰相反
我运行楼主提到的例子
非常快啊
而且占用内存也少
不知道楼主是怎么回事
该换机器了吧
离线codespy
只看该作者 25楼 发表于: 2008-09-14
大多数情况下,在要显示丰富的互动内容的界面里,Qt的绘制速度就成为了性能瓶颈,而不是信号槽机制。
离线ndyw

只看该作者 24楼 发表于: 2008-09-14
肯定慢。QT界面的效率应该比Windows本身的要慢
有问题请教别人时,俺都先行谢过:)
离线codespy
只看该作者 23楼 发表于: 2008-09-14
几乎没有人关注Qt的效率和资源占用率-_-!.
离线codespy
只看该作者 22楼 发表于: 2008-09-09
引用第21楼water_wf于2008-09-08 18:46发表的  :
ls贴代码

我重新实现了QAbstractScrollArea的scrollContentBy()这个虚函数。
这个函数默认会做很多看似有用的事。
离线water_wf

只看该作者 21楼 发表于: 2008-09-08
ls贴代码
离线codespy
只看该作者 20楼 发表于: 2008-09-08
我的第一感觉是正确的。我潜入Qt源码,发现了在缺省的视图子类在卷动的时候会做很多耗时的操作。所以我重新实现了更新函数,提出了一些冗余的函数。这样以后,快速浏览大量文件的速度显著提升,当然比XP的资源管理器稍差些,但已经比较流畅了。
离线water_wf

只看该作者 19楼 发表于: 2008-09-05
为什么必须等待?消息本来就是存在队列中,如果执行完slot,emit才返回,还需要队列吗?
离线mumutouv

只看该作者 18楼 发表于: 2008-09-05
water_wf

postEvent是会进入循环列表的,而且必须要等待,如果用sendEvent的话,会优先于循环列表执行
离线nmiirq

只看该作者 17楼 发表于: 2008-09-05
windows下楼主若嫌慢,可以用MS的资源管理器的!
离线codespy
只看该作者 16楼 发表于: 2008-09-04
http://doc.trolltech.com/3.3/classes.html
用IE 和 FireFox浏览这个URL,在拖动的时候都很流畅,而唯独Qt Demo里的那个Browser例子在拖动的时候卡的严重。
从这些情况可以看出,Qt不适合制作需要浏览大量数据的软件。
离线codespy
只看该作者 15楼 发表于: 2008-09-04
用Qt助手(assistant)浏览"All Classes"这个页面的时候,稍微快速拖动就一卡一卡的,视感很差!
离线water_wf

只看该作者 14楼 发表于: 2008-09-04
void QCoreApplication::postEvent ( QObject * receiver, QEvent * event )  [static]
Adds the event event, with the object receiver as the receiver of the event, to an event queue and returns immediately!
return immediately!
qt以前的版本有很多限制,比如以前的版本中thread不能使用signal,但是qt4中就可以,也是立即返回,而且可以用自己的event queue,呵呵,欢迎你跟我讨论!
离线mumutouv

只看该作者 13楼 发表于: 2008-09-04
当某个信号对其客户或所有者发生的内部状态发生改变,信号被一个对象发射。只有定义过这个信号的类及其派生类能够发射这个信号。当一个信号被发射时,与其相关联的槽将被立刻执行,就象一个正常的函数调用一样。信号-槽机制完全独立于任何GUI事件循环。只有当所有的槽返回以后发射函数(emit)才返回。如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地执行,但是它们执行的顺序将会是随机的、不确定的,我们不能人为地指定哪个先执行、哪 个后执行。
离线mumutouv

只看该作者 12楼 发表于: 2008-09-04
signal/slots不是阻塞的???
11楼,我想你弄错了,你可以看看官方的资料,关于qt的事件机制,有很明确的描述
离线water_wf

只看该作者 11楼 发表于: 2008-09-04
但是signal/slots不是阻塞的,慢是肯定慢了点,不过还不到糟糕的地步吧
离线mumutouv

只看该作者 10楼 发表于: 2008-09-04
signal  slot机制只有回调函数速度的1/10,官方说法
离线justmeloo

只看该作者 9楼 发表于: 2008-09-04
信号槽机制的相对于回调机制的灵活性就是牺牲了些速度性能
努力中的青春岁月
离线codespy
只看该作者 8楼 发表于: 2008-09-04
我为例子程序添加了一个工具栏弹出式菜单(注意:不是视图里的数据项),结果发现菜单的淡入淡出过程缓慢。在菜单弹出的时候,我肯定没有去拖动滚动条的。从此点来看,整个程序的相应速度都很慢,而不仅仅是绘制方面。
离线mumutouv

只看该作者 7楼 发表于: 2008-09-04
首先1点
qt做出来的肯定是比windows自带的速度会慢,因为它们最终调用的都是同一个win32 api函数,
不然windows早关门了
但是如果配置好一点的话,qt虽然慢一点,但是用户应该感觉不出来,不然,trolltech早关门了
离线codespy
只看该作者 6楼 发表于: 2008-09-03
刚才又测试了Qt 4.4.0 demo里的Item Views->Directory View例子,用它浏览www.qiliang.net上当下的网页,在快速拖动的时候还是一顿一顿的。

 
离线nmiirq

只看该作者 5楼 发表于: 2008-09-03
呵呵,我的是Celeron 2.39GHz,256MB内存!
楼主的机子配置何如?
离线codespy
只看该作者 4楼 发表于: 2008-09-03
我确认我所说的。机器好的可能感觉不到性能的差距。
我初步认为性能差的直接原因是在Qt的绘制效率上,因为窗口最大话后,绘制的东西就多了起来。这一点在我的机器上表现得特别明显。

另外我的机器没中毒。
在线snow_man_0

只看该作者 3楼 发表于: 2008-09-03
楼主的机器可能中毒了
离线nmiirq

只看该作者 2楼 发表于: 2008-09-03
楼主确认吗?
我刚刚试了一下,我的机子上的速度很正常呀,一点也不比XP的资源管理器差~
(对了,我是开到最大化,然后条目是999个!拖动速度一点都不慢!)
其它人的呢?
离线blusherbear

只看该作者 1楼 发表于: 2008-09-03
确实存在这个问题。
开发中要避开这些性能瓶颈
快速回复
限100 字节
 
上一个 下一个