使用SWT做開發的朋友,一定要注意~資源是一個殺手!對于我們這些無知的開發人員,使用了資源,不釋放它,比不寫程序或者不提供這個功能還可怕~因為它經不起考驗,到了時間肯定完蛋!
前兩個天就遇到了這個,同事寫了一個插件,一次性從數據庫中取得1W以上的數據然后組織成樹表格,顯示給客戶~取得數據的速度,樹組裝的速度,樹展開的速度,都做了反復的優化,一切優化完成以后,就宣布完成!但是沒有測,當我連續打開4個樹以后,程序就非掉了~
我先加大rcp的啟動內存,沒用!瘋狂調用cg,沒用!而且這中錯誤錯的很奇怪,如果是內存異常,應該是JVM報出的,但是這次不是,仔細閱讀異常,竟然是SWT打開圖片,顏色,字體的時候的異常~肯定是資源問題了!
因為以前一直再用Jface的treeviewer組件,所以一直沒有關心資源的問題~但是1W的數據,使用的SWT的原生Tree組裝的~而且還用了一些字體~
排查代碼,竟然發現有字體被new出,但是沒有釋放~問題就出在這里~
調用了
Font font = new Font (display, "Courier", 10, SWT.NORMAL);
那么就應該在不在需要這個Font的時候調用
font.dispose();
兩個原則:
第一條是"誰占用,誰釋放",第二條是"父構件被銷毀,子構件也同時被銷毀"。
客戶虐我千百遍,我待客戶如初戀!