效能分析作業具體要求如下:
一、**
要求:以《戰爭與和平》作為輸入檔案,重讀向由檔案系統讀入。
次數時間
第一次33.972s
第二次35.884s
第三次34.393s
平均時間
通過使用 ptime.exe測試執行時間發現自己的**執行具體有多慢,我猜測程式的瓶頸是單詞從檔案中讀取。
file *fp;二、分析fp=fopen(fileinfo.name,"
r");
首先,效能分析的軟體我使用的 vs2010 自帶的效能分析工具profile,由於之前我一直使用dev c++編譯環境,對於vs不太熟悉,從網上找到操作步驟,按照優化步驟一步一步進行,但是總是會彈出彈窗,說不支援重定向。如圖:
(以下這一段是自己的感慨,比較囉嗦,可以略過)
1.先開啟very sleepy vs,接著開啟cmd,輸入命令列引數(此時重定向的txt應選擇比較大一點的,以至於自己可以有時間進行捕獲,war_and_peace.txt就可以)
2.點選refresh,就會看到第一欄就是自己執行的.exe檔案。如圖:
3.程式執行結束之前快速點選兩下自己所要捕捉的.exe檔案,就會生成效能分析報告。
第一次分析結果:
和我**的完全不一樣,程式的瓶頸居然是單詞重複計數部分。
三、優化
1.修改一:
自己查詢了一下:strcmp(s1,s2) 判斷兩個字串s1和s2是否相同,相同返回true ,不同返回false;在自己查詢到時候發現另乙個函式stricmp,它是可以比較字串陣列的乙個方法或函式,但是不可以區分大小寫。這也提醒了自己,單詞詞頻重複有誤,忽略了函式具體的含義。將strcmp修改為stricmp可以減少區分大小寫字母執行的時間。
if(stricmp(c[i].str,s)==0)2.修改二:
考慮到for迴圈比較費時間,將sum賦值給了新定義的變數z,這樣for迴圈呼叫z,不用每次都傳sum值。
int四、再次profilez;z=sum;
for(i=0;i<=z;i++)
根據自己列出來的**,修改之後再次進行profile。
優化結果:count函式總執行時間減少了,%exclusive下降比較明顯,總執行時間縮短了很多。
次數時間
第一次9.219s
第二次9.302s
第三次9.271s
平均時間
9.264s
3次平均時間比未修改之前縮短了25.486s。
五、總結
經過這次效能分析,學會了效能分析的流程,知道每一步應該做什麼,也知道自己的程式的瓶頸應該去實際分析,找到瓶頸及時解決。對於自己不擅長的,不應該逃避,應該及時努力學習去解決。
軟工2017第三週作業 詞頻效能分析
這篇部落格中要寫以下幾點 1 準備工作 2 詞頻效能分析 3 優化 4 再次profile 5 push wf.exe的git位址 一 準備工作 1 寫好功能四,重定向輸入,以war and peace檔案為例,執行結果如圖 2 連續三次執行,程式三次執行時間和cpu引數,截圖如下 3 猜測此程式的...
第三週作業3
例2.1 功能 布林型別使用舉例 include 編譯預處理命令 include 使用控制符boolalpha需使用此標頭檔案 using namespace std 使用標準名空間 std int main 主函式 例2.3 附例 include 例2.4 例2.5 例2.6 char ch c ...
第三週作業
實驗作業 1.輸入課本各個例題,除錯執行程式,並分析程式,將每乙個程式改寫2到3個版本,自己分析程式結果,然後再除錯執行,核對分析結果的對錯。2.編寫程式輸入乙個三角形的三條邊,計算其面積和周長 3.編寫程式計算並輸出課本本章習題3表示式的值並分析結果。4.編寫乙個程式,輸入乙個一元二次方程的三個係...