現在計算機的硬體裝置的效能增長速度異常迅猛,使得越來越多的程式設計師開始不再關注**的執行效率,不再花費心思去構想精妙的演算法,優化自己的**,導致設計的系統越來越龐大、越來越複雜,效能卻越來越差,程式設計師自己也逐漸淪落為藍領技術工人。乙個經過簡單編碼培訓的人就可以勝任程式設計師的工作嗎?我認為不是這樣的。乙個合格的程式設計師,除熟練掌握多種程式語言外,創造力才是程式設計師生命的源泉。而創造力並非天生的,需要豐富的經驗加勤奮的思考。本文並非想**程式設計師的成長,只是將此作為引子,希望各位同仁能關注自己編寫**並能為之自豪,並以乙個簡單的例子說明關注**優化問題導致的巨大效能提公升。即使機器再好,乙個編寫不良的**,依然難以達到理想的效能。
今天測試人員向我抱怨,說我們提交的api**效能比較差,解析乙個90萬筆業務的報文居然用了9個小時,這當然是不能接受的。我自己簡單測試下,發現在我的t43/1.5g機器上,api的解析速度只能達到每秒30筆,直觀覺得**應存在效能問題。我仔細查閱了程式,沒有發現明顯的問題。到底是什麼導致效能損失的呢?我逐步跟蹤每步**的執行,終於找到了問題所在,簡單地講此效能問題是頻繁呼叫函式strlen()導致的。各位可能非常驚訝,我當時也很驚訝,但情況確實如此。90萬筆業務的報文長度約50m,解析報文時我們呼叫了自己編寫的底層**strstrext()替換系統的strstr()以便支援的gb18030漢字,而效能正是strstrext()底層函式導致的。
先看看原始的strstrext()函式的**:
//查詢含漢字串的位置
char
*strstrext(lpcstr ssearch,lpcstr sfind)
if(nindex
==nlen)
return
(char
*)(ssearch
+noffset);
intn
=ischinesechar(ssearch
+noffset);
if(n
>0)
else
}return
null;}
發現strlen()對大字串可能導致效能問題後,我將該函式修改如下:
char
*strstrext(lpcstr ssearch,lpcstr sfind)
if(nindex
==nlen)
return
(char
*)(ssearch
+noffset);
intn
=ischinesechar(ssearch
+noffset);
if(n
>0)
}else
}return
null;}
新函式與原函式的唯一差別是不再使用strlen()去獲取串的結束位置,而是直接通過/0結束符判斷串的結束位置。修改後的**在我t43的機器上,解析速度提高到每秒3000筆的速度,是原**的近100倍,達到了系統效能指標的要求。
這個問題提示我們,程式設計師應時刻關注**的效能問題,對核心**編寫者更是如此。
關注程式設計師健康之 程式設計師的飲食
程式設計師的飲食應該如何安排 高蛋白食品抗輻射,動物肝臟和新鮮蔬果保護眼睛,富含鉀 氨基酸等元素的食品健腦。如今,電腦越來越普及,許多人不僅在單位使用,家裡也安裝了電腦,由於操作時間不斷延長,一些疾病也隨之而來。日前,程式設計師張先生因為每天與電腦為伍十幾個小時而肩痠背痛,眼睛痠腫,動不動就感冒,諮...
走出半生,望你歸來仍是程式設計師
在世二十七年,自認為積累了一點人生經驗。思索著當你還在你娘胎的日子裡,整理一番留給以後的你,當作你以後漫漫人生路上的參考。我保證,倘若哪天你發現某條不對或者跟你的想法不一樣,你能敞開心扉與我交談,如果我仍健在的話。吾兒 0 自從得知懷孕後,你娘親每分每秒都小心翼翼,抵制了以往一切美味可口的 垃圾 食...
程式設計師應知 關注細節
曾經有一句話,叫做 細節決定成敗 充分說明了細節對於成功的作用。如果我們注意一下,就會發現很多因為注重細節而獲得成功的案例。產品的細節 蘋果的系列產品我們都已經非常熟悉了,各種各樣i打頭的產品,對於細節已經給予了非常大的關注。尤其體現明顯的就是在對使用者使用的友好度和便利性方面的細節。ipad ip...