隨筆-348  評論-598  文章-0  trackbacks-0

          目前正在為一個C/S架構的超市業務往來系統進行系統架構,為了提升性能和改善維護性,我準備使用對象池技術,在此之前參考了BeanSoft的那篇對象池代碼,用.Net重寫了一個并測試了性能。

          測試用例:
              10000次生成OleDbConnection的實例,并使用Open方法打開連接
          結果:
              直接使用new語句生成實例不釋放 需要12秒多一點
              使用對象池生成實例不釋放 需要7秒多一點
              性能提升約 48%左右

          但是如果在每次使用之后都調用Close()方法釋放資源的話,則兩者性能基本相同。

          看來主要是因為占用的資源不釋放,導致系統變慢。換句話說,如果系統需要比較頻繁的調用某些對象的實例的話,那么可以使用對象池技術來改善總體性能。



          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2007-11-10 22:53 TiGERTiAN 閱讀(1341) 評論(4)  編輯  收藏 所屬分類: Java 、DotNet

          評論:
          # re: 對象池技術[未登錄] 2007-11-11 09:59 | 吳開春
          對象池相對于new的優勢表現在對象重用上,這之間少了一個(創建時間-檢索時間).另外,每次新建對象的產生和jvm垃圾收集過程對系統性能的影響也同時消除了.理論上是應該加快系統運行速度.

          感覺比較適用于運行期狀態無關類,否則每次都要恢復默認,用起來也是很麻煩的一件事.  回復  更多評論
            
          # re: 對象池技術 2007-11-11 12:55 | TiGERTiAN
          運行期狀態有關的類也可以用,不過需要定義一個Close之類的方法,然后利用反射機制調用該方法來釋放資源和恢復默認值。  回復  更多評論
            
          # re: 對象池技術 2007-11-11 22:54 | flybean
          當調用者調用的close()方法應該是將連接返回到池中,真正關閉連接是池要做的。  回復  更多評論
            
          # re: 對象池技術 2007-11-12 11:19 | TiGERTiAN
          @flybean
          這樣做是對的,不過我想用對象池技術,而不單純用連接池。
          我昨天晚上作了一個多小時的測試,發現用反射機制調用Close()方法關閉連接,空間和時間都增加了3%-5%,這不是我所希望的,所以我可能會用一個方法封裝好Close(),其中顯示的調用Close,這樣不必要花費反射的代價。

          不知道flybean又沒有好的辦法,在對象池中進行資源的釋放。   回復  更多評論
            
          主站蜘蛛池模板: 绥中县| 全州县| 英吉沙县| 上犹县| 周至县| 乌拉特前旗| 宣威市| 莎车县| 富平县| 商洛市| 昆明市| 康马县| 博白县| 沅陵县| 政和县| 巴林右旗| 高尔夫| 河北区| 博罗县| 潍坊市| 耿马| 永平县| 文昌市| 榆社县| 五指山市| 林西县| 盐边县| 安平县| 望江县| 民丰县| 牙克石市| 合山市| 永胜县| 宽甸| 庐江县| 樟树市| 黄梅县| 民县| 嘉定区| 崇阳县| 富顺县|