圖形性能(widgets的渲染性能太低,所以推出了QML,走硬件加速)和網絡性能(對UPD性能有實測數據支持)


作者:JasonWong
鏈接:http://www.zhihu.com/question/37444226/answer/72007923
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。

~~~~~圖形性能部分~~~~~
Qt的widgets部分,運行時的圖像渲染性能是一般的,因為大部分的界面內容都是Qt自繪,沒有走硬件加速,也就是說很多圖形內容都是CPU算出來的。
但是widgets底層畢竟是C++,而且Qt的模塊寫的也不錯,做過很多優化,這個渲染的性能在桌面上與有硬件加速的框架比差別不大,除非是有很多動畫的復雜場景才能看出區別。
不過在手機上或者嵌入式上,就會明顯覺得widgets的渲染性能低了。

那么怎么辦呢,Qt是不會抱死在widgets一個框架上的。所以Qt推出了Quick和QML。
Quick是可以走硬件加速,各個平台都可以,而且支持OpenGL或OpenES。圖形渲染性能非常強悍。
而且框架本身是類js的開發語言QML,開發效率也非常高。
目前Qt正在開發Controls2.x,這是Quick中主要的控件庫,比現在的1.x性能又是成倍的提升。

有些人說Quick加載慢,我想說,把QML文件(包括Controls這些庫級別的)直接編譯進qrc文件,然后開QML編譯器,加載速度66的。


~~~~~網絡性能部分~~~~~
先說TCP部分的服務器,就是QTcpServer
這個模塊性能是不強悍的,甚至連中等性能水平都到達不了(C++)。
這主要體現在兩部分,第一是並發很低,這和Qt用的事件循環底層有關,超過800長鏈接就不穩定,超1000基本沒法正常使用。第二是數據傳輸性能低,大約傳輸相等的數據量,比ASIO要多至少一倍CPU占用。
但是畢竟是C++,性能相比其他語言還是可以的,開發小規模的服務器,是沒問題的。

再說說UDP服務器,就是QUdpSocket
前段時間做一個項目,要求用UDP接收大量數據,是每包1400字節數據,每秒4w包,大約相當於500M的帶寬。
然后我先是用Qt做開發,然后各種丟包,最后簡化到單獨線程死循環接收,接收后甚至不做任何處理直接回去接收下一個包。這樣,也只能每秒收7000個左右。
額,這丟了80%多,親,不給力啊。
然后換了ASIO,也只能接到1.3w個,親,還是不給力啊。
后來換了WinPcap,輕松拿下4w個而且一個不丟,終於給力了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM