隨筆-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 閱讀(1334) 評論(4)  編輯  收藏 所屬分類: JavaDotNet

          評論:
          # 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又沒有好的辦法,在對象池中進行資源的釋放。   回復  更多評論
            
          主站蜘蛛池模板: 甘孜| 社旗县| 克拉玛依市| 革吉县| 敦煌市| 左权县| 璧山县| 阿拉善右旗| 文山县| 镇巴县| 繁峙县| 赤峰市| 卢氏县| 江永县| 奉节县| 龙门县| 武陟县| 鹤峰县| 定陶县| 铜鼓县| 友谊县| 漾濞| 宣威市| 茂名市| 龙南县| 昌黎县| 洛隆县| 永定县| 平利县| 广饶县| 桓仁| 福清市| 泾阳县| 额济纳旗| 贺州市| 板桥市| 法库县| 海门市| 新野县| 孟津县| 夏邑县|