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

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

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

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

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

     一、集中處理 (batch processing)

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

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

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

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

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

     四、cache機(jī)制 (cache mechanism)

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

     五、延遲更新 (defer update)

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

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

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

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

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

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

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   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>
            国产精品mv在线观看| 欧美综合国产| 欧美激情影院| 亚洲国产经典视频| 在线播放精品| 久久久精品日韩欧美| 久久久综合激的五月天| 韩国精品在线观看| 久久精品一区蜜桃臀影院| 另类尿喷潮videofree| 亚洲美女啪啪| 狠狠色狠狠色综合日日tαg| 蜜臀av性久久久久蜜臀aⅴ| 91久久久久| 性做久久久久久久免费看| 在线激情影院一区| 欧美日韩中文字幕在线| 午夜精品久久久久99热蜜桃导演| 美女精品国产| 亚洲欧美日韩精品久久久| 精品91久久久久| 欧美调教视频| 久久一区二区三区四区五区| 中文精品一区二区三区| 蜜臀99久久精品久久久久久软件 | 亚洲欧美日韩国产成人精品影院| 欧美一区二区视频在线观看| 韩国精品久久久999| 欧美日韩视频在线一区二区| 亚洲另类视频| 久久久视频精品| 亚洲精品资源美女情侣酒店| 国产精品久久7| 久久久精品网| 在线视频欧美日韩精品| 久久这里只有| 中国av一区| 黄色精品一区二区| 欧美日韩国产999| 午夜精品久久久久久久蜜桃app | 欧美日韩国产美女| 先锋影院在线亚洲| 亚洲国产欧美另类丝袜| 性色一区二区三区| 亚洲精品中文字幕有码专区| 国产欧美三级| 欧美成人国产va精品日本一级| 中国成人黄色视屏| 欧美国产第二页| 一区二区欧美日韩| 国产一区二区黄| 国产精品久久二区二区| 欧美激情 亚洲a∨综合| 性视频1819p久久| 日韩视频在线一区二区| 免费h精品视频在线播放| 亚洲欧美视频| 日韩一区二区电影网| 精品999在线播放| 国产精品日韩在线一区| 欧美精品亚洲一区二区在线播放| 久久精品免费观看| 夜夜嗨av一区二区三区网页| 欧美一区成人| 欧美专区亚洲专区| 亚洲私人影院| 99国产精品久久| 亚洲国产日韩在线| 在线国产精品播放| 国产亚洲欧美一区二区三区| 国产精品久久国产愉拍| 欧美日韩国产综合在线| 嫩草影视亚洲| 久久蜜桃香蕉精品一区二区三区| 西西人体一区二区| 亚洲图片欧美午夜| 一区二区三区你懂的| 99天天综合性| 亚洲国产另类久久久精品极度| 亚洲第一福利社区| 久久久久这里只有精品| 久久久久久久波多野高潮日日 | 亚洲黄色在线视频| 亚洲第一毛片| 在线观看欧美激情| 亚洲第一福利在线观看| 伊人久久亚洲影院| 伊人久久综合97精品| 精品二区视频| 亚洲国产合集| 亚洲人成网站色ww在线| 国内外成人免费激情在线视频网站 | 99re这里只有精品6| 9久re热视频在线精品| 日韩视频在线免费| 在线视频中文亚洲| 亚洲一区欧美| 欧美伊人久久久久久久久影院| 亚洲免费综合| 欧美中文日韩| 狼人社综合社区| 欧美精品www| 欧美精品国产| 国产精品欧美日韩一区| 国产亚洲毛片| 亚洲高清免费在线| 日韩视频免费观看高清在线视频| 99精品99| 久久gogo国模裸体人体| 老司机免费视频久久| 亚洲国产精品123| 亚洲区免费影片| 一区二区三区日韩精品视频| 午夜欧美精品| 女主播福利一区| 欧美色精品在线视频| 国产欧美丝祙| 亚洲国产成人久久| 亚洲一区久久久| 欧美在线视频观看免费网站| 美日韩精品视频免费看| 亚洲理论电影网| 午夜亚洲影视| 午夜欧美不卡精品aaaaa| 欧美精品一区在线| 国产精品三级久久久久久电影| 狠狠久久婷婷| 亚洲小视频在线观看| 久久久精彩视频| 亚洲人精品午夜在线观看| 亚洲欧美在线另类| 欧美国产精品专区| 国产婷婷色一区二区三区在线 | 久久精品国产一区二区三| 欧美顶级大胆免费视频| 国产女优一区| 一区二区三区视频在线播放| 久久精品女人| 日韩特黄影片| 老牛影视一区二区三区| 国产精品欧美日韩一区| 亚洲精品免费在线观看| 久久爱www久久做| 亚洲第一天堂av| 欧美伊人久久久久久午夜久久久久| 欧美不卡视频一区发布| 国产日韩欧美一区二区三区在线观看| 亚洲人成绝费网站色www| 久久爱另类一区二区小说| 亚洲精品黄色| 噜噜噜在线观看免费视频日韩| 国产精品资源| 亚洲香蕉网站| 亚洲黄页一区| 久久久噜噜噜久久久| 黄色亚洲网站| 久久精品夜夜夜夜久久| 一本一本久久a久久精品综合麻豆| 久久五月天婷婷| 国产尤物精品| 在线午夜精品自拍| 亚洲黄一区二区| 欧美一区午夜精品| 国产麻豆精品theporn| 亚洲一区二区三区高清不卡| 亚洲国产精品第一区二区| 久久亚洲精品视频| 好男人免费精品视频| 久久精品国产清自在天天线| 亚洲一区在线播放| 欧美日韩一区二区三区四区在线观看| 亚洲精品国产品国语在线app| 欧美自拍偷拍午夜视频| 欧美一区二区三区免费观看视频| 国产精品麻豆成人av电影艾秋| 亚洲视频一区二区| 亚洲肉体裸体xxxx137| 欧美经典一区二区三区| 亚洲人成网站在线播| 欧美激情精品久久久六区热门 | 韩日欧美一区| 欧美一区二区久久久| 亚洲免费在线播放| 国产精品香蕉在线观看| 欧美在线一二三区| 欧美一区二区日韩一区二区| 狠狠色综合网站久久久久久久| 久久人人97超碰人人澡爱香蕉| 欧美在线高清视频| 亚洲春色另类小说| 亚洲国产欧美日韩| 欧美日韩一区在线播放| 亚洲女女女同性video| 亚洲欧美一区二区三区久久| 国产精品v欧美精品∨日韩| 日韩视频在线观看免费| 亚洲欧美日韩精品久久久| 国产一区二区三区久久精品| 免费欧美网站| 欧美日韩1234|