標籤:
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個而且一個不丟,終於給力了。
圖形效能(widgets的渲染效能太低,所以推出了QML,走硬體加速)和網路效能(對UPD效能有實測資料支援)