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

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

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

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    Ruby性能優化的幾個Tip(update)

    Posted on 2008-03-27 09:46 dennis 閱讀(1810) 評論(2)  編輯  收藏 所屬分類: 動態語言
        數據都是在我的機器上測試所得,我的機器配置:AMD athlon 64 x2 Dual 4000+ 2.11Ghz,1.87G內存。cruby版本是1.8.6,jruby是1.1RC3。操作系統是xp sp2。

    1、將繁忙的循環放在內層,比如下面的代碼:
    a=
    for i in 0..1000
      
    for j in 0..10
         a
    +=(i+j)
      end
    end
    替換成:
    for j in 0..10
       
    for i in 0..1000
        a
    +=(i+j)
       end
    end
    cruby提升15%左右,而jruby提升30%以上。

    2、乘法運算換成冪運算,cruby降低了200%以上,jruby僅降低30%。也就是說冪運算盡量換算成乘法運算。結論:冪運算換成乘法運算,乘法運算換成加法運算,多數情況下都能對性能有所提高,但請以實際測量為準。

    3、100*2 替換成 100<<1,jruby提升8左右%,c ruby提升在0到3%左右。結論:乘以2或者除以2操作可以替換成位移操作,這個調整對性能提高有限,可能以降低代碼可讀性為代價。

    4、字符串累積 a+="abc" 替換成 a<<"abc" c ruby提升接近100%,jruby提升97%

    5、將case...when...end語句替換成if...elsif...end語句,cruby沒有明顯變化(甚至有所降低),而jruby卻提高15%左右。同時,jruby的case...when...end語句的效率比cruby快上60%,if...elsif...end語句比cruby快上50%。結論:使用cruby,用case...when語句為好,而jruby則盡量使用if...elsif

    6、將case語句中的頻率比較高的分支提前,cruby提升15%左右,jruby也是如此。將if...elsif...end語句中的頻率比較高的部分提前,jruby提升比較少,大概在5%左右,而cruby可以達到10%。。結論:盡管頻率高的語句提前,可以適當提升性能,但可以看到也是有限的,分支語句的順序不能僅僅考慮頻率,更應該兼顧邏輯,維持在同一個抽象層次上。

    7、任何一次代碼調整,請都要測量一下,這些Tip僅僅是我在我的機器環境下的測試結果。這些調整策略對其他語言也大多有效,我是在讀了《代碼大全2》代碼調整一章后做的測試,并應用到我的代碼中了。


    評論

    # re: Ruby性能優化的幾個Tip  回復  更多評論   

    2008-03-27 22:29 by dreamhead
    你這幾條tip,大多對于對于其它語言也有作用。

    在Ruby中,能使用builtin庫的盡量使用builtin庫,因為builtin幾乎直接映射到底層(比如C),而某些語法則做不到,比如有些時候,用each要比用while循環來得快。

    # re: Ruby性能優化的幾個Tip  回復  更多評論   

    2008-03-28 09:29 by dennis
    @dreamhead
    嗯,是我在讀《代碼大全2》代碼調整那章,然后第二天就做的測試。謝謝指點。
    主站蜘蛛池模板: 国产大片91精品免费观看男同| **实干一级毛片aa免费| 免费av欧美国产在钱| 91亚洲视频在线观看| 日韩精品久久久久久免费| 亚洲国产精品无码专区在线观看| 成人国产精品免费视频| 亚洲女同成av人片在线观看 | 中文日韩亚洲欧美制服| 国产免费不卡v片在线观看| 亚洲乱码一二三四区乱码| 一个人看的www在线观看免费 | 精品久久久久久亚洲综合网| 午夜成人免费视频| 国产精品亚洲专区无码WEB| 免费看一级做a爰片久久| 日本黄页网址在线看免费不卡| 亚洲一区日韩高清中文字幕亚洲| 卡1卡2卡3卡4卡5免费视频| 亚洲中文无码卡通动漫野外| 大陆一级毛片免费视频观看| 久久亚洲中文字幕无码| 亚洲一级特黄大片无码毛片| 精品亚洲永久免费精品| 亚洲第一页在线播放| 韩国18福利视频免费观看| 一级毛片在线播放免费| 日本亚洲欧洲免费天堂午夜看片女人员 | 亚洲国产精品无码一线岛国| 免费一级毛片无毒不卡| 亚洲成a人片在线观看中文app| 午夜dj免费在线观看| 久久久免费观成人影院| 亚洲黄色在线电影| 国产国产人免费人成免费视频| 免费无码H肉动漫在线观看麻豆| 波多野结衣亚洲一级| 亚洲日韩在线中文字幕第一页| 久久精品免费电影| 亚洲AV综合色区无码一二三区| 亚洲成a人片在线播放|