您好,登錄后才能下訂單哦!
這篇文章主要介紹“Swing和SWT的速度比較”,在日常操作中,相信很多人在Swing和SWT的速度比較問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Swing和SWT的速度比較”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
前面文章已經說過,MiG Layout Site網站的Mikael Grev曾編寫了一個GUI benchmark,來測試和比較Swing和SWT的性能,最終結論是除在Windows上比較Swing和SWT的速度幾乎一樣快之外,在其他操作系統上Swing的速度都要快于SWT。
這好像違背人們的常識,模擬的組件如何能快過本地組件?實際如果你按照下面的想法想,這個現象也就不難解釋:
1.本地組件實際上也是畫出來,只不過是操作系統畫罷了。這個通常是人們所忽略的,仿佛只有Swing是畫出來的,而本地組件就是屏幕上的附屬物似的,忘記了它們也是畫出來的。
2.現在Java平臺的運行速度已經不慢于C/C++等靜態編譯型語言的產生的代碼。人們往往提到本地仿佛就比Java實現要快。在過去也許可以這樣看,但是現在隨著Java 6平臺性能的提高,許多地方Java平臺的速度反而快過本地調用。因此是應該讓人們從過去對于Java速度的印象中醒過來時候了,現在人們提到Java速度想到的應該是和C/C++相提并論了。
3.JNI調用耗費的時間是不能忽略的。JNI調用速度要比普通Java方法調用慢好幾倍甚至幾十倍。即便是在Java 6中,這種情況并沒有改善。問題的實質在于Java運行時系統和本地庫之間畢竟是兩個異質系統,它們之間的調用必然有大量的轉換開銷。Java普通方法調用和JNI調用之間的關系就好像是本地調用和遠程過程調用之間的區別,遠程過程調用有網絡數據通信和數據類型系統轉換的開銷,而JNI也有數據傳遞(主要是內存拷貝,速度雖然快過網絡通信,但是相對直接調用是不能忽略的)和數據類型系統轉換(Java數據類型和C語言數據類型)的開銷。
4.Swing絕大部分是用Java平臺模擬出的組件,這個過程都在一個系統平臺內完成。而SWT是部分在本地系統完成,部分在Java平臺完成,要在這兩個平臺之間需要進行頻繁的數據交互。
5.Swing可以享受JVM的特殊待遇,進行特殊優化,比如inline,JIT代碼,Swing事件隊列對于事件的預處理(合并Paint事件,批處理Java 2D光柵指令等),這就像本地組件可以利用操作系統進行優化一樣。
因此如果排除人的因素,也就是說排除Java平臺的工程師、Windows的工程師、Linux的工程師和Solaris的工程師本身能力的區別,從理論上來說,Swing的速度是完全可以超過SWT的。理解這一點你只要記住最關鍵的兩個原因是:
1).Java平臺的速度可以和C/C++一樣快。這個已經被很多benchmark證明了,它們的速度是相當的。因此Java模擬組件不一定會慢過本地組件,這要看誰的實現算法好。
2).跨系統之間的調用(JNI調用)開銷是不能忽略的。這個也在很多論文和benchmark得到證明。Swing中組件和數據之間的更新速度要遠快于SWT,其原因就是Swing不需要進行數據傳輸,而SWT需要跨兩個系統進行數據傳輸。這在大數據量編輯組件如Table中尤其明顯。原因就在于Swing直接顯示了數據模型,而SWT需要將這些數據使用JNI發送到本地組件中去。
不可否認,Microsoft在Windows上浸淫了這么多年,圖形用戶界面的優化已經非常完善,而反觀Linux和Unix系列的桌面系統卻沒有如此優化過。這就是為什么前文的benchmark顯示SWT能在Windows上和Swing速度相持平,而在其他平臺上遠慢于Swing的原因。因為SWT使用本地組件,它既占了Windows的光,也因此吃了Linux和Unix的虧。以上是比較wing和SWT的速度。
到此,關于“Swing和SWT的速度比較”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。