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

          目前正在為一個C/S架構(gòu)的超市業(yè)務(wù)往來系統(tǒng)進(jìn)行系統(tǒng)架構(gòu),為了提升性能和改善維護(hù)性,我準(zhǔn)備使用對象池技術(shù),在此之前參考了BeanSoft的那篇對象池代碼,用.Net重寫了一個并測試了性能。

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

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

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



          ---------------------------------------------------------
          專注移動開發(fā)

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

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

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

          不知道flybean又沒有好的辦法,在對象池中進(jìn)行資源的釋放。   回復(fù)  更多評論
            
          主站蜘蛛池模板: 龙川县| 清水河县| 新巴尔虎右旗| 二连浩特市| 剑河县| 美姑县| 象州县| 突泉县| 宿迁市| 三明市| 平果县| 梓潼县| 安化县| 汪清县| 丰台区| 剑河县| 蒙阴县| 滦南县| 阳东县| 闵行区| 阳朔县| 东丰县| 湟中县| 莱西市| 泽库县| 陈巴尔虎旗| 石渠县| 崇明县| 荔浦县| 游戏| 桐城市| 沅江市| 镇安县| 化隆| 沿河| 那曲县| 乌苏市| 定西市| 永昌县| 利川市| 新余市|