<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    爪哇一角

    共同探討STRUTS#HIBERNATE#SPRING#EJB等技術(shù)
    posts - 3, comments - 6, trackbacks - 0, articles - 99
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Hibernate性能測(cè)試(load10000條記錄的簡(jiǎn)單測(cè)試 僅供參考)

    性能測(cè)試:
    ?? 對(duì)一個(gè)9036條記錄的表進(jìn)行l(wèi)oad測(cè)試,表字段有8個(gè),有一個(gè)字段是text型,每條記錄的該字段約有1300多字節(jié),其余都是簡(jiǎn)單字段
    ?? 軟硬件:AMD XP1600+, 512M內(nèi)存(測(cè)試時(shí)內(nèi)存有余),winXP SP1, JDK1.4.2_06, Mysql4.1.9,InnoDB,GBK, mm.3.1.6驅(qū)動(dòng), tomcat5.0.28(啟動(dòng)設(shè)置最大內(nèi)存256M,最小內(nèi)存64M),hibernate2.1.8, 打開(kāi)二級(jí)緩存Ehcache(配置二級(jí)緩存最多10000個(gè)對(duì)象)關(guān)閉所有hibernate log信息和sql輸出
    ??
    ?? 方法1:先用 List idList = session.find("select o.id from MyClass o");找出idList然后
    ????????? list.add(session.load(MyClass.class, (Long)idList.get(i)));組成list
    ?? 方法2:直接用hibernate的session.find(from MyClass )得到list
    ?? 方法3:直接用hibernate的session.iterator(from MyClass ),然后list = new ArrayList(9100);? while(iter.hasNext()) { list.add(iter.next()); }構(gòu)造list
    ??
    ?? 每個(gè)方法連續(xù)調(diào)用5次。(第1次調(diào)用是沒(méi)有二級(jí)緩存的結(jié)果,第2次以后是有二次緩存的結(jié)果)
    ??
    ?? 結(jié)果如下:??
    ???????
    ????結(jié)束第1次loadAll1()方法, 用時(shí)15763ms~14762ms
    ????結(jié)束第2次loadAll1()方法, 用時(shí)771ms~580ms
    ????結(jié)束第3次loadAll1()方法, 用時(shí)631ms~611ms
    ????結(jié)束第4次loadAll1()方法, 用時(shí)641ms~591ms
    ????結(jié)束第5次loadAll1()方法, 用時(shí)601ms~551ms
    ??
    ????結(jié)束第1次loadAll2()方法, 用時(shí)2965ms~3025ms
    ????結(jié)束第2次loadAll2()方法, 用時(shí)2854ms~2950ms?
    ????結(jié)束第3次loadAll2()方法, 用時(shí)2613ms~
    ????結(jié)束第4次loadAll2()方法, 用時(shí)2815ms~
    ????結(jié)束第5次loadAll2()方法, 用時(shí)2653ms~
    ????
    ????結(jié)束第1次loadAll3()方法, 用時(shí)16664ms~16514ms
    ????結(jié)束第2次loadAll3()方法, 用時(shí)651ms~661ms
    ????結(jié)束第3次loadAll3()方法, 用時(shí)621ms~591ms
    ????結(jié)束第4次loadAll3()方法, 用時(shí)571ms~571ms
    ????結(jié)束第5次loadAll3()方法, 用時(shí)641ms~631ms ????


    ??
    ?? 分析: 方法1和方法3在訪問(wèn)數(shù)據(jù)庫(kù)的策略是一樣的,所以運(yùn)行時(shí)間基本差不多。(方法3稍慢一點(diǎn)可能是iterator遍歷再組成list用的時(shí)間較多)這兩種方法第一次運(yùn)行都要進(jìn)行9036+1次數(shù)據(jù)庫(kù)訪問(wèn),所以時(shí)間最長(zhǎng)。而第二次以后運(yùn)行只需訪問(wèn)一次數(shù)據(jù)庫(kù),并只取出數(shù)據(jù)的id不取別的字段,因?yàn)榇藭r(shí)所有對(duì)象都已經(jīng)存在二級(jí)緩存中,剩下的是訪問(wèn)二級(jí)緩存組成list,所以速度最快。
    ??
    ????????? 而方法2每次都會(huì)訪問(wèn)數(shù)據(jù)庫(kù)load所有數(shù)據(jù)的所有字段,打開(kāi)cache的log信息,可以看出第2次以后會(huì)通過(guò)二級(jí)緩存得到數(shù)據(jù),但是由于load所有字段占用時(shí)間占了此方法較大比例的開(kāi)銷(xiāo),所以,即使訪問(wèn)二級(jí)緩存,性能提高也非常微小,每次運(yùn)行的時(shí)間花費(fèi)幾乎一樣。
    ??
    ?????????

    注意事項(xiàng):
    ? (1)不要在機(jī)器運(yùn)行較長(zhǎng)時(shí)間后運(yùn)行tomcat進(jìn)行測(cè)試,特別是機(jī)器啟動(dòng)后頻繁地開(kāi)啟tomcat,java程序,打開(kāi)較大應(yīng)用程序占用很多內(nèi)存的時(shí)候。那時(shí)候測(cè)試結(jié)果一定不準(zhǔn)。比如:我昨天晚上測(cè)試先用方法1的時(shí)間是200S,60S,后運(yùn)行方法2,竟然用了8000S,200S!
    ? (2)設(shè)置log4j的LOG級(jí)別,不要hibernate和sql的信息。時(shí)間會(huì)減少很多。(log4j的配置文件難道有這個(gè)規(guī)矩:一行結(jié)尾不能有空格的說(shuō)???FT!!!)
    ? (3)在tomcat啟動(dòng)時(shí)進(jìn)行測(cè)試,并在測(cè)試方法前調(diào)用一個(gè)會(huì)用到hibernate的方法,讓hibernate初始化先完成
    ?

    主站蜘蛛池模板: 精品无码专区亚洲| 亚洲偷自拍另类图片二区| 精品免费久久久久国产一区| 免费一级毛片一级毛片aa| 亚洲精品无播放器在线播放| 四虎成人免费观看在线网址| 亚洲色大成网站WWW国产| 免费看a级黄色片| 特黄特色大片免费| 国产亚洲成归v人片在线观看| 国产在线观看无码免费视频| 亚洲精品无码久久一线| 亚洲成人免费在线| 亚洲一级高清在线中文字幕| 在线观看成人免费| 免费大片av手机看片| 亚洲一区二区女搞男| 99精品一区二区免费视频| 亚洲制服在线观看| 欧洲精品免费一区二区三区| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲国产精品成人久久蜜臀| eeuss影院ss奇兵免费com| 国产成人精品日本亚洲网站| 免费看片在线观看| 国产精品自拍亚洲| 亚洲日韩精品一区二区三区无码| 99久在线国内在线播放免费观看| 亚洲va乱码一区二区三区| 亚洲国产高清精品线久久| 无码国产精品一区二区免费式芒果| 久久久久se色偷偷亚洲精品av | 99在线视频免费观看视频| 老妇激情毛片免费| 久久精品国产亚洲AV无码偷窥| 无码一区二区三区AV免费| 一级毛片人与动免费观看| 亚洲欧洲国产视频| 国产日韩成人亚洲丁香婷婷| 在线观看H网址免费入口| j8又粗又长又硬又爽免费视频|