程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Eclipse RCP性能問題與解決方案

Eclipse RCP性能問題與解決方案

編輯:關於JAVA

2004年開始,我開始讓研發團隊基於Eclipse插件技術開發通用管理軟件(最近的一個產品是一體化企業管理軟件CRM+OA+DSS+進銷存的E-System)

選取RCP方式開發管理軟件,我們的初衷是期望使得用戶界面的豐富性和易操作,能夠充分利用Eclipse本身豐富的SWT/JFACE/GEF/EMF等技術來完美我們的界面表現,應該說這方面Eclipse RCP確實不辜負我們的期望。

在四年的Eclipse RCP開發經歷中,經歷了很多坎坷和難以逾越的障礙,其中有一個至今仍在困擾著我們的問題就是Eclipse RCP的性能問題,它主要有以下幾個方面問題:

1、如何高性能處理服務端與客戶端的數據傳遞?

2、因為我們軟件面向的用戶是通用市場,用戶機器環境良莠不齊(從最新的四核處理器到十年前的P3機都有人使用,內存從256M到2G都有)?如何克服Eclipse RCP對客戶端應用的高性能要求(用過老機器使用Eclipse開發的都知道那導出Eclipse RCP漫長等待的滋味,2 hours,真是生不如死呀!)?並能盡量發揮機器的處理能力?

在這方面我嘗試了很多方法,可以用於改善這兩個問題:

1、選擇最合適的數據傳遞方法,rmi、web-service、hessian、tcp client/server做了下對比,我覺得如何你需要傳遞的數據如果耦合層次比較低、業務關系簡單其實完全可以模擬http方式,用自己的request/response對象進行傳遞。那rmi/web-service是蠻好的選擇。但如果數據之間耦合關系緊密、業務關系復雜(我現在的系統有312個POJO,它們之間都有或緊或密的關系,而視圖由於我讓客戶可以自定義,所以無法在設計階段確定form view與action對象)這樣顯然無法使用web-service(web-service只支持最原始的幾種數據類型)、而直接將對象序列化進行傳遞的方法也不可取(因為pojo對象均有關聯,直接序列化的對象幾乎就是整個數據庫的內容,因為form不確定也無法構造對應的action對象來完成傳遞)。掙扎了很久,最後用了一種折衷的方法,數據傳輸采傳值拷貝序列化方式(但默認只拷貝兩層,即引用的對象中只包含原始屬性,不再包括它引用的對象/集合屬性),在特殊需應用到多層對象級聯數據傳遞時才定制request對象中的約定參數來表明傳遞層次。傳輸方式使用自己定制的tcp client/server方式,選用這種方式主要是為了降低數據傳輸的尺寸(web-service中垃圾太多了),其中細節當然很多(如如何自動為request對象補充未傳輸數據、服務端hibernate對象如何將POJO代理對象拷貝成值對象...),每個問題都是我們的一個血淚史,嘿....

2、Eclipse對系統硬件的高要求地球人都知道,如何盡量降低它呢?我的原則是盡量不要使用非必要插件,RCP每加載一個插件自然就會多消耗。另外還有一個很重要的方法就是關掉不使用的perspective,NND,當初系統剛出街時,很快就有客戶投訴早上打開系統很快,中午就慢如蝸牛了,一頓臭罵呀!當然也不能隨用隨開,那Eclipse要隋性加載干啥,一樣客戶臭罵(怎麼我每點一次鼠標就要出去抽只煙呀?),沒計,只好寫個計數器,從客戶登錄開始就記錄各perspective的使用頻率,把超出范圍(根據客戶的內存選擇,我認為有閒置256M內存不要超過5個,512M內存可以15個,1G以上就可以不關了)的perspective關掉,保持最高使用率的perspective可以隨點隨開。

BTW:千萬記得要在eclipse rcp中加上運行參數(如果客戶內存富裕你也可以在安裝程序中調高它,我的程序默值是這樣),不然內存被它吃光了,就聽客戶狂打你們客服電話吧!

-vmargs
-Xverify:none
-XX:+UseParallelGC
-XX:PermSize=20M
-XX:MaxPermSize=128M
-Xms64M
-Xmx128M

Eclipse RCP關於管理軟件方法應用的開發資料很少,歡迎同道之人相互交流!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved