最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

優(yōu)化Ruby腳本效率實(shí)例分享

 更新時間:2014年06月30日 15:44:30   投稿:hebedich  
以前寫過批量修改繁體文件名為簡體的Ruby腳本 ,可惜腳本的性能很有問題,批量重命名時運(yùn)行速度非常慢。這次準(zhǔn)備優(yōu)化下代碼,提升腳本的執(zhí)行效率。

profile.rb是為Ruby程序準(zhǔn)備的profiler,它可以統(tǒng)計(jì)并輸出各方法的運(yùn)行時間,以便于找到程序執(zhí)行的性能瓶頸。這次就用它來剖析腳本的運(yùn)行時間。使用方法很簡單,加上命令行選項(xiàng)-r profile就可以:

ruby -r profile rename.rb
運(yùn)行結(jié)束后,會把統(tǒng)計(jì)信息輸出到標(biāo)準(zhǔn)錯誤輸出中。如下圖所示:

profile統(tǒng)計(jì)的是各方法的運(yùn)行時間,分為2類。第1種計(jì)算的是從方法調(diào)用到方法返回之間的時間,稱為整體時間;第2種則是從整體時間中扣除在該方法中調(diào)用其它方法所耗費(fèi)時間之后得到的時間,稱為實(shí)際時間。輸出信息每行中各字段含義如下(從左到右):

該方法執(zhí)行時間占整體時間的百分比,比例越高越說明這行代碼可能需要優(yōu)化

整體時間的總和

實(shí)際時間的總和

被調(diào)用的次數(shù)

每次調(diào)用的平均實(shí)際時間(毫秒)

每次調(diào)用的平均整體時間(毫秒)

方法名

由上圖可以看出,腳本執(zhí)行的時間大部分耗在了循環(huán)上。解決方法有兩個:消除循環(huán)或減少循環(huán)次數(shù)。前者很難實(shí)現(xiàn),暫且還沒有想到辦法,也許根本就沒有可能。腳本中mapping的大小為2685,所以每修改一個文件名需要執(zhí)行2685次循環(huán),且循環(huán)中的encode和gsub!都是耗時操作。通常文件名的長度不超過30個字符,通過遍歷文件名中每個字符的方式重命名就可以把循環(huán)次數(shù)縮減到不超過30次。

修改代碼后重新執(zhí)行分析命令,得到的結(jié)果是腳本運(yùn)行時間從379395秒優(yōu)化到2418秒,性能整整提升了156倍,達(dá)到2個數(shù)量級的效果。

相關(guān)文章

  • 淺析Ruby中的類對象的概念

    淺析Ruby中的類對象的概念

    這篇文章主要介紹了Ruby中的類對象的概念,是Ruby學(xué)習(xí)當(dāng)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Ruby單元測試框架TestUnit的替代者M(jìn)iniTest介紹

    Ruby單元測試框架TestUnit的替代者M(jìn)iniTest介紹

    這篇文章主要介紹了Ruby單元測試框架TestUnit的替代者M(jìn)iniTest介紹,本文先是對比了TestUnit、MiniTest的優(yōu)劣,然后給出了MiniTest的使用示例,需要的朋友可以參考下
    2015-03-03
  • win10下使用virtualbox + vagrant配置ruby開發(fā)機(jī)環(huán)境

    win10下使用virtualbox + vagrant配置ruby開發(fā)機(jī)環(huán)境

    Vagrant是一個基于Ruby的工具,用于創(chuàng)建和部署虛擬化開發(fā)環(huán)境。它 使用Oracle的開源VirtualBox虛擬化系統(tǒng),使用 Chef創(chuàng)建自動化虛擬環(huán)境。搭配Cmder如絲般順滑,實(shí)現(xiàn)你所有關(guān)于Mac&Linux的幻想
    2017-08-08
  • 比較詳細(xì)的ruby symbol 學(xué)習(xí)資料

    比較詳細(xì)的ruby symbol 學(xué)習(xí)資料

    最近在學(xué)習(xí)ruby on rails,的確是一個優(yōu)秀的數(shù)據(jù)庫開發(fā)框架。但在過程中,發(fā)現(xiàn)在視圖文件夾中的rhtml文件里有大量的類似于以下的語句
    2008-08-08
  • Ruby中對一元操作符重載實(shí)例

    Ruby中對一元操作符重載實(shí)例

    這篇文章主要介紹了Ruby中對一元操作符重載實(shí)例,實(shí)例說明如何對一元操作符進(jìn)行重載,需要的朋友可以參考下
    2014-06-06
  • Ruby實(shí)現(xiàn)的各種排序算法

    Ruby實(shí)現(xiàn)的各種排序算法

    這篇文章主要介紹了Ruby實(shí)現(xiàn)的各種排序算法,本文給出了Bubble sort、Insertion sort、Selection sort、Shell sort等排序的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-05-05
  • ruby中的循環(huán)語句總結(jié)

    ruby中的循環(huán)語句總結(jié)

    這篇文章主要介紹了ruby中的循環(huán)語句總結(jié),本文總結(jié)了Ruby中常用的一些循環(huán)語法,需要的朋友可以參考下
    2015-05-05
  • Windows下ruby語言安裝教程

    Windows下ruby語言安裝教程

    這篇文章主要介紹了Windows下ruby語言安裝教程,本文使用rubyinstaller提供的安裝包安裝,并給出圖文說明,非常簡單,需要的朋友可以參考下
    2015-02-02
  • Ruby中XML格式數(shù)據(jù)處理庫REXML的使用方法指南

    Ruby中XML格式數(shù)據(jù)處理庫REXML的使用方法指南

    這篇文章主要介紹了Ruby中XML格式數(shù)據(jù)處理庫REXML的使用方法指南,值得注意的REXML庫處理XML字符串時的編碼問題,是需要的朋友可以參考下
    2016-04-04
  • 使用Ruby來處理JSON的簡單教程

    使用Ruby來處理JSON的簡單教程

    這篇文章主要介紹了使用Ruby來處理JSON的簡單教程,用到了Ruby gem,需要的朋友可以參考下
    2015-04-04

最新評論

延安市| 大埔区| 吉隆县| 如东县| 新泰市| 江达县| 盐源县| 陇西县| 安泽县| 清新县| 平舆县| 西平县| 黎川县| 台南市| 伊宁市| 平邑县| 大田县| 平南县| 大名县| 揭东县| 阳东县| 宝山区| 水富县| 健康| 襄城县| 调兵山市| 盖州市| 建阳市| 邢台县| 潮安县| 石台县| 杭州市| 精河县| 喜德县| 武穴市| 大埔县| 双流县| 大余县| 阿图什市| 大厂| 龙川县|