青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

SmartPtr
本博客已搬至:http://www.cnblogs.com/baiyanhuang/
posts - 29,comments - 176,trackbacks - 0
By SmartPtr(http://m.shnenglu.com/SmartPtr/)
  
    目前所做的項目,今年應該是第5release了, 走過了這5年的風風雨雨,中間幾度更易開發(fā)人員,現(xiàn)在的團隊與5年前的團隊已是兩個完全沒有“交集”的團隊, 這樣必然導致我們對項目會存在很多的不理解,不理解其初衷,不理解其原始設(shè)計,不理解其代碼。。。對一些不理解的地方不敢大動手腳,只能修修補補以完成需要的功能,其結(jié)局從開發(fā)角度看就是總體設(shè)計的缺失, 代碼結(jié)構(gòu)的混亂,從功能角度看就是容易出錯,運行速度極慢。

    項目極其需要一次深入的代碼重構(gòu)與性能提升,而這都至少需要一個release的時間來做,對于代碼重構(gòu), 從商業(yè)的角度來講,是十分不可取的,一是其風險比較大,大刀闊斧的重構(gòu),如何保證軟件的原有功能是個大問題; 而整整一個release的時間做重構(gòu),對于用戶來講,他拿到新的版本時,看不到任何新功能與提高,難道你告訴他,我們的代碼結(jié)構(gòu)現(xiàn)在很elegent。。。;但對于性能提升,現(xiàn)在是到了不得不做的地步,因為能夠大幅度的提升性能,想必用戶也能接受一個沒有新功能的新版本。

    于是, 我們決定用一個release的時間來做性能優(yōu)化。

    當然,我們不打算從學術(shù)的角度來考慮, 這個是O(n) 的算法,那個是O(nlgn) 的。。。; 也不打算從語言的角度來看待, 傳引用要比傳值快,類成員在初始化列表初始化。。。;當然, 并不是說這些不重要, 只是這些都應該是比較常見的,大家都應該清楚的事情, 也就是說我們假設(shè)我們的項目中不存在這種問題; 另外就是從語言角度來做的優(yōu)化, 對我們的性能提升幫助不會太大。 我們會從一個宏觀的,特定于我們項目workflow方面的角度來做優(yōu)化。 主要包括以下幾個方面:

     一、集中處理 (batch processing)

     把相關(guān)的操作集中起來處理, 從程序原理上來講, 集中做相同的操作, 由于數(shù)據(jù)局部性的原理, 很多數(shù)據(jù)可以直接從cache中取得, 速度會比較快。 但我們主要考慮的還是另外一個因素,減少不必要的重復的初始化,假設(shè)將我有十個對象要update 一般情況下, 為了做update 我們必然要準備某些前提數(shù)據(jù), 如果十個對象分別處理, 我就要初始化十次, 但如果我先把這十個對象收集起來,到最后一起處理, 最后只會初始化一次前提數(shù)據(jù)。 這對于update對象密集的情況十分有用。 當然, 這樣我們也能有效的減少函數(shù)調(diào)用次數(shù), 對性能提高也有不少的幫助。

     二、減少重復操作(初始化) (reduce repeated operations)

      重復操作, 一個是在有循環(huán)的時候, 我應該盡量把一些common的操作, 如一些輸入數(shù)據(jù)的初始化提到循環(huán)外面來做,這在上面一點中也提到過。 二是對于一些全局的屬性,操作等, 我們應該放在內(nèi)存里,并提供一個全局訪問點來直接得到, 而不是每次在需要的時候都去重新初始化一遍。 舉個例子來講, 每個application應該都有他自己的一些configuration, setting, 如果每次我需要這些信息的時候, 都從文件,或者注冊表去讀一次, 那就非常的浪費時間了, 尤其是涉及到I/O操作的時候。 當然, 這個有點像 cache的概念, 但是還遠遠不及。

     三、消除冗余操作 (avoid redundant operations)

    也許你不相信, 一個項目經(jīng)過很多不同的人的開發(fā), 由于理解上的誤差,以及時間緊迫倉促完工,很多workflow上可能會都重復的操作, 仔細檢察, 從全局上來考慮整個流程,你會發(fā)現(xiàn), 其實我們做了很多不該做的事。

     四、cache機制 (cache mechanism)

     Cache的原理是用空間換時間, 當然,這個空間是指內(nèi)存。我們把一些重要的中間信息放在內(nèi)存中,以極大的提高查找,更新的速度。一般常用的數(shù)據(jù)結(jié)構(gòu)就是map, 比如一個對象有長度這么一個屬性, 但每次去得這個長度的時候都需要經(jīng)過復雜的耗時的計算, 如果我們有些操作需要大量的使用到這個對象及其屬性, 我們就可以建這樣一個map: map<對象指針,長度> 這樣每次用到時, 我只要到這個map中去查就可以了, 如果某個對象被更新了,我們需要更新這個map, 也就是說維護cache.

     五、延遲更新 (defer update)

      這是一個講究策略的做法, 比如說我們的項目要在9.1號前demo給客戶, 我們要寫好代碼,并維護好文檔, 但是時間很急, 如果我們在9.1號前把這兩件時都要做好,恐怕要瘋狂加班了, 但是我們知道,客戶只需要看到我們軟件運行的效果, 文檔他暫時并不關(guān)心, 那好吧, 我們9.1前就寫代碼, 文檔就在demo后寫好了。當然舉這個例子的并不是鼓勵大家先寫代碼,后補文檔, 而是為了說明有些事情, 如果資源緊張, 我們可以把他分開看待,對于要的不急的那部分, 我們可以先不做, 等到時不忙了, 需要了的時候再做, 以緩解當前的緊張。 從代碼角度舉個例子, 假設(shè)我們有十條樣條曲線需要更新, 更新可能包括樣條線的方程,圖形顯示, 以及其長度等等, 如果我這些事情我一下子全做了, 用戶可能要等很久, 但是我們知道, 用戶做了這個操作, 他只需要看到圖形上更新就可以了, 至于長度等什么的, 等他需要了, 或者空閑的時候,我們再給他更新, 這就讓整個操作比較流暢了。

     這是我通過這個release對軟件優(yōu)化的一些想法,我相信現(xiàn)實中優(yōu)化的方法是多種多樣的,我希望這篇文章能夠起到拋磚引玉的作用,希望大家能夠提出自己的一些經(jīng)驗來共同分享。

posted on 2007-08-10 18:10 SmartPtr 閱讀(1223) 評論(10)  編輯 收藏 引用

FeedBack:
# re: 我對軟件優(yōu)化的一些想法
2007-08-10 21:36 | missdeer
這文章總結(jié)得好  回復  更多評論
  
# re: 我對軟件優(yōu)化的一些想法
2007-08-10 21:37 | pass86
最強的優(yōu)化,還是算法優(yōu)化。  回復  更多評論
  
# re: 我對軟件優(yōu)化的一些想法
2007-08-10 22:43 | SmartPtr
因為算法上的優(yōu)化一般都是為大家所知的, 所以在開發(fā)過程中也會特別注意, 因此這方面的優(yōu)化并不是我們的側(cè)重點  回復  更多評論
  
# re: 我對軟件優(yōu)化的一些想法
2007-08-10 22:52 | aGAric
很好,不過不同情況下實踐起來會有不同的重點  回復  更多評論
  
# re: 我對軟件優(yōu)化的一些想法
2007-08-10 23:03 | SmartPtr
@aGAric
的確, 但這些應該是一些比較COMMON的想法, 也就是說我們在做優(yōu)化的時候會去想到, 并可能有用的想法, 不知道你沒有其他類似的方法, 大家可以一起討論討論:)  回復  更多評論
  
# re: 我對軟件優(yōu)化的一些想法
2007-08-11 00:03 | 羅賓李
如果是java,那優(yōu)化的余地不大。但是如果是c++,那不同的實現(xiàn)效果會差別很大,c++里面有很多技巧是java里面不能用的,比如創(chuàng)建私有堆,重載資源分配等等,當然,最重要的是使用了合適的東西去做恰當?shù)氖虑椤?
看了你的文章有一個地方我不能不指出,就是你說用一個map來保存對象的長度這個做法我認為是很不科學的,首先map的查找時間是O(logN)級別的,反復查找總是有開銷的,其次既然你已經(jīng)用對象指針做key,那為何不把長度做為對象的一個屬性,那樣更新和獲取都是O(1)的,當對象數(shù)量非常巨大時,你會知道這個差別有多大。一般map用在正好相反的情況,就是根據(jù)長度找對象,這個時候用map是很不錯呃選擇,如果長度有重復,可以考慮multimap。
根據(jù)我經(jīng)歷過的幾個c++的優(yōu)化項目,最終的瓶頸都是在如何正確的cache數(shù)據(jù)上。  回復  更多評論
  
# re: 我對軟件優(yōu)化的一些想法
2007-08-11 00:58 | SmartPtr
@羅賓李
1. 當然,對于特定于語言的優(yōu)化,C++比Java應該要好一些, 畢竟C++是一個更底層,可控性更強的語言。 但是對于workflow上的優(yōu)化, 應該是語言無關(guān)的。我們所做的性能的提升,大部分是靠對workflow的優(yōu)化實現(xiàn)的。

2. 關(guān)于map使用, 謝謝你的評論, 你說的很對。 這個例子為了簡化,我沒有給出足夠的context. 我補充一些吧:
1) 該對象是一個API, 一個第三方庫,我們沒有權(quán)限去修改
2) 假設(shè)這個對象是一條樣條曲線, 該第三方庫沒有在該對象中加入一個長度屬性,而是在每次需要時去計算,從數(shù)學角度,我想應該也有其道理。(這樣我就能保證每次取到的都是最新的)
重要的是,我們都認同cache是性能優(yōu)化的利器, 的確,設(shè)計好的cache數(shù)據(jù)結(jié)構(gòu)的確很重要,當然,這都是和特定需求緊密結(jié)合在一起的。

  回復  更多評論
  
# re: 我對軟件優(yōu)化的一些想法[未登錄]
2007-08-13 09:40 | 夢在天涯
很好,就是有點抽象哦,哈哈!  回復  更多評論
  
# re: 我對軟件優(yōu)化的一些想法
2007-08-13 10:05 | zenith
還好,我們做的項目都不是太大,重構(gòu)一次也不算很難,呵呵。。。  回復  更多評論
  
# re: 我對軟件優(yōu)化的一些想法
2007-08-16 12:51 | houdy
對于算法的好壞,只有當N相當大的時候,效果才很明顯,對于一般的情況從O(N^2)優(yōu)化到O(NlogN),效果并不是很明顯.
但是LZ說得這幾種情況,有時候效果卻很明顯.其中的cache的思想,幾乎應用到計算機領(lǐng)域的各個方面,例如對于數(shù)據(jù)存儲,CPU緩存,內(nèi)存,硬盤,網(wǎng)絡硬盤,不就是用速度快的設(shè)備去cache數(shù)據(jù)慢的設(shè)備么?
  回復  更多評論
  

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩免费在线观看| 亚洲国产日韩欧美| 久久综合给合| 亚洲人成在线播放| 国产精品丝袜久久久久久app| 亚洲女人天堂av| 亚洲大胆美女视频| 亚洲激情视频在线播放| 国产精品乱人伦中文| 亚洲欧美一区二区三区极速播放 | 欧美激情一区二区三区在线视频| 亚洲免费在线看| 亚洲激情视频| 久久久欧美精品sm网站| 亚洲午夜在线观看视频在线| 狠狠色丁香久久婷婷综合_中| 欧美日韩视频免费播放| 久久频这里精品99香蕉| 欧美一区二区视频观看视频| 亚洲高清成人| 蜜臀久久99精品久久久画质超高清| 午夜宅男久久久| 国产欧美一级| 国产精品永久免费| 国产精品成人免费| 欧美精品一区二区三区高清aⅴ| 久久精品女人| 午夜精品国产| 99这里只有久久精品视频| 亚洲人成网站在线播| 99成人免费视频| 亚洲精品1区2区| 欧美一区在线看| 亚洲天堂偷拍| 日韩一级不卡| 国产精品99久久久久久久久久久久 | 亚洲卡通欧美制服中文| 亚洲国产精品久久精品怡红院| 韩国一区二区在线观看| 亚洲欧美一区在线| 久久se精品一区二区| 久久gogo国模啪啪人体图| 久久久亚洲国产天美传媒修理工 | 久久成人18免费网站| 欧美制服丝袜| 玖玖在线精品| 亚洲激情在线观看| 久久gogo国模裸体人体| 久久久精品一区| 欧美激情亚洲激情| 亚洲精品在线视频观看| 一区二区精品在线观看| 亚洲午夜日本在线观看| 欧美一级艳片视频免费观看| 久久久www成人免费精品| 欧美高清视频在线播放| 欧美片第1页综合| 国产精品国产自产拍高清av| 国产午夜精品一区二区三区视频| 狠狠爱成人网| 中日韩高清电影网| 久久免费黄色| 亚洲精品欧洲| 欧美亚洲视频| 欧美精品啪啪| 韩国精品在线观看| 亚洲一级黄色| 久久视频在线看| 洋洋av久久久久久久一区| 欧美一区日本一区韩国一区| 欧美不卡高清| 国产日韩欧美日韩大片| 亚洲欧洲日产国产网站| 欧美一区2区视频在线观看| 久久久91精品国产一区二区三区| 亚洲黑丝一区二区| 欧美在线地址| 欧美视频一区二区在线观看| 激情六月婷婷综合| 亚洲欧美日本视频在线观看| 女女同性女同一区二区三区91| 亚洲先锋成人| 噜噜噜噜噜久久久久久91| 亚洲午夜av在线| 欧美日韩岛国| 欧美新色视频| 亚洲日本欧美天堂| 欧美1区免费| 午夜亚洲伦理| 国产精品男女猛烈高潮激情| 亚洲免费观看高清完整版在线观看| 久久在线免费| 久久精品亚洲精品国产欧美kt∨| 国产欧美日韩综合一区在线播放| 亚洲视频在线观看三级| 亚洲国产成人av在线| 久久久国产精品一区二区中文 | 欧美精品激情在线| 亚洲电影第三页| 久久亚洲国产精品一区二区| 亚洲一区免费| 国产精品美女午夜av| 亚洲一区在线观看视频| 亚洲黄网站黄| 欧美福利视频一区| 亚洲国产精品成人一区二区| 99视频精品在线| 亚洲第一在线视频| 国产午夜亚洲精品羞羞网站| 亚洲国产一区二区三区a毛片| 国产三级精品三级| 中文av字幕一区| 亚洲麻豆av| 六月天综合网| 久久尤物视频| 国产日韩av一区二区| 夜夜嗨av一区二区三区网页| 亚洲国产精品综合| 久久精品欧美日韩精品| 午夜精品久久久久影视| 欧美乱在线观看| 91久久精品日日躁夜夜躁欧美 | 欧美一区二区精品| 欧美日本不卡高清| 亚洲国产精品久久精品怡红院| 国产主播一区| 欧美在线影院| 久久精品系列| 国产欧美一区二区白浆黑人| 亚洲伊人久久综合| 午夜综合激情| 国产人妖伪娘一区91| 亚洲天堂网在线观看| 亚洲一区二区黄| 欧美天天综合网| 亚洲图片欧洲图片av| 中文国产一区| 欧美视频成人| 亚洲一品av免费观看| 国产亚洲综合精品| 亚洲欧美日韩国产一区| 亚洲欧美日韩另类| 国产精品免费网站| 亚洲欧美一级二级三级| 久久久国产精品亚洲一区| 国产无一区二区| 欧美在线你懂的| 免费看的黄色欧美网站| 亚洲激情电影在线| 欧美日韩午夜视频在线观看| 99re66热这里只有精品4| 亚洲欧美另类在线观看| 国产一区二区三区久久精品| 久久精品三级| 亚洲激情自拍| 久久国产精品99国产| 在线播放亚洲一区| 欧美日本在线一区| 亚洲欧美日韩一区二区| 免费在线欧美黄色| 一本色道久久88精品综合| 欧美三级视频在线观看| 性欧美xxxx大乳国产app| 欧美激情二区三区| 亚洲欧美日本在线| 亚洲国产日韩一区| 国产精品成人久久久久| 久久精品夜夜夜夜久久| 亚洲看片免费| 久久久久久网址| 一本久久综合亚洲鲁鲁五月天| 国产精品一区二区你懂的| 可以看av的网站久久看| 一本色道**综合亚洲精品蜜桃冫 | 正在播放亚洲一区| 狂野欧美激情性xxxx欧美| 一本色道综合亚洲| 国产在线播精品第三| 欧美日韩和欧美的一区二区| 欧美中文日韩| 一区二区三区欧美视频| 欧美成人性生活| 久久精品成人一区二区三区| 99re视频这里只有精品| 国语自产精品视频在线看| 欧美天天影院| 久久久在线视频| 亚洲在线黄色| 一区二区日韩| 亚洲激情视频在线| 久久尤物视频| 久久久久久亚洲综合影院红桃| 日韩午夜电影av| 在线观看一区欧美| 国产精品一区免费在线观看| 欧美日韩国产成人| 久久免费高清| 久久精品99国产精品日本| 亚洲午夜在线观看| 欧美激情1区|