作業要求參見[
一、得出程式執行時間
執行截圖如下:
第一次執行時間為 0.942 s
第二次執行時間為 0.826 s
第三次執行時間為 0.861 s
平均執行時間為:0.876 s
cpu引數:intel(r) core(tm) i5-4200m cpu @ 2.50ghz 2.50ghz
二、猜測程式瓶頸
猜測一:每次查詢map容器該單詞是否出現過比較費時,因為個單詞都要去查詢一遍,優化過後可能執行快5%。
if(mp[str]==0猜測二:判斷是否是單詞組成元素比較費時,因為要去判斷每乙個字元,優化過後可能執行快10%。)else
if(isalpha(ch)!=0||(ch=='三、利用profile找出瓶頸cpu使用率截圖:\''&&len>0)||ch=='
-'||(ch>='
0'&&ch<='
9'&&len>0))
函式呼叫次數及執行時間截圖:
這兒可以看到最耗時的三個函式分別是:map的查詢比較函式,string的拼接函式以及判斷是否為字母函式。
map查詢比較函式和string拼接函式:
if (mp[str] == 0判斷字母函式:) else
if (isalpha(ch) != 0 || (ch == '分析:map和string的兩個函式可能需要呼叫堆疊,消耗時間比較多,而判斷字母函式因為執行的次數多,導致最後執行時間就比較多。\''&&len>0) || ch == '
-' || (ch >= '
0'&&ch <= '
9'&&len>0))
四、優化程式
map和string想不出怎麼優化,判斷函式直接和字母進行比較。相應的函式變化如下:
if (text[i]>='五、再次profile測試ptime執行時間截圖:a'&&text[i]<='z'
) else
if (text[i]>='
a'&&text[i]<='z'
) else
if ((text[i]=='
'&&len>0)||text[i]=='—'
)
第一次執行時間為 0.826 s
第二次執行時間為 0.817 s
第三次執行時間為 0.827 s
平均執行時間為:0.823 s
比未修改時快了0.053s
cpu使用率截圖:
函式呼叫次數及執行時間截圖:
可以看到map和string函式執行時間比例基本上沒有變化,判斷字母函式找不到了,其他執行函式的執行時間百分比都是低於0.1%的。
六、總結
經過修改,程式的執行速度有了一定的提公升,有很多地方我還沒能力去修改,如果能進一步修改,程式的執行速度會有進一步的提公升。在以後的程式中,我們一定要靈活運用各種工具,優化程式,提公升程式執行速度。
20180925 3 效能分析
此作業要求參見 要求0 以 戰爭與和平 作為輸入檔案,重讀向由檔案系統讀入。連續三次執行,給出每次消耗時間 cpu引數。測試用例 戰爭與和平 以為資料輸入。cpu引數 intel r core tm i74500u cpu 1.80ghz 1.80ghz 要求1 猜測存在的瓶頸 判斷引數是否是檔案目...
作業要求 20180925 3 效能分析
本次作業要求參見 由於上次作業沒有實現功能4,具體的 還在做,在接下來的時間如果實現功能4,會補寫功能4的效能分析。在對自己的已實現功能效能分析後,對喬靜玉同學程式的功能4進行了效能分析 以下是我對自己上次實現的功能的進行的效能分析,以此證明我認真學習了使用ptime程式進行效能分析。要求0 用pt...
mysql 效能分析 Mysql效能分析
優化mysql資料庫效能的十個引數 1 max connections 允許的同時客戶的數量。增加該值增加 mysqld 要求的檔案描述符的數量。這個數字應該增加,否則,你將經常看到 too many connections 錯誤。預設數值是100,我把它改為1024 2 record buffer...