第三週作業(3) 詞頻統計 效能分析

2022-07-28 05:06:16 字數 2143 閱讀 7993

效能分析作業具體要求如下:

一、**

要求:以《戰爭與和平》作為輸入檔案,重讀向由檔案系統讀入。

次數時間

第一次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

z;z=sum;

for(i=0;i<=z;i++)

四、再次profile

根據自己列出來的**,修改之後再次進行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.編寫乙個程式,輸入乙個一元二次方程的三個係...