這篇部落格中要寫以下幾點:
1、準備工作
2、詞頻效能分析
3、優化
4、再次profile
5、push wf.exe的git位址
一、準備工作
1、寫好功能四,重定向輸入,以war_and_peace檔案為例,執行結果如圖:
2、連續三次執行,程式三次執行時間和cpu引數,截圖如下:
3、猜測此程式的瓶頸:正規表示式。因為上週完成作業的時候,我用兩種方法過濾標點符號,得到的結果都不一樣,我認為再次優化之後,會讓輸出結果更精確。
fileword = regex.replace(fileword, @"二、詞頻效能分析[^a-za-z0-9\u4e00-\u9fa5\s]
", "
");//
利用正規表示式過濾標點符號
fileword = regex.replace(fileword, "
[!@#$%^&*()`,./;':\"<>`?...]
", "");
filewords = fileword.split();//
分割字串
1、 最開始進行效能分析的時候vs系統報錯說是不能對重定向檔案進行效能分析,認為是程式執行時間長短的關係,不能捕捉到程式執行,然後不能對它進行分析,然後增大輸入量來使程式執行時間加長,設計實驗1證明不能對重定向檔案進行效能分析分析與程式執行時間沒有關係,如實驗1所示:
實驗1:增高輸入量,使用cpu使用率工具和cpu取樣方法,將3m多的war_and_peace.txt與60m多的1.txt檔案,進行兩方面的比較:
(2)然後對這兩個重定向檔案進行效能分析,證明了程式執行時間長短和對重定向檔案進行效能分析沒有直接關係,與此同時也證明了增大輸入量對效能分析的影響不大,證據如圖所示:
2、用效能嚮導工具和檢測方法對程式進行效能分析,先在vs的專案這一欄選擇wf屬性進行引數設定,具體步驟如圖所示:
然後出現了下面這個圖的錯誤,但是還是出現了分析報告,如圖所示:
三、優化
對於上面截圖中執行單個工作最多的三個函式都是呼叫的vs內部函式:split(),雜湊表,我不知道怎麼進行優化,然後我優化了我猜測的瓶頸:
優化:將正規表示式改為ch,其餘**未做修改,只是將**段一改為**段二**展示如圖
**段一
fileword = regex.replace(fileword, @"**段二[^a-za-z0-9\u4e00-\u9fa5\s]
", "
");//
利用正規表示式過濾標點符號
fileword = regex.replace(fileword, "
[!@#$%^&*()`,./;':\"<>`?...]
", "");
filewords = fileword.split();//
分割字串
char ch = ;程式三次執行時間結果如圖所示:filewords = fileword.split(ch, stringsplitoptions.removeemptyentries);
平均時間是0.389s,未修改之前的平均時間是0.679s,根據計算的word總數,計算單詞總量的結果更精確了,將war_and_peace.txt裡的內容複製到word中計算的單詞總數是567385,用正規表示式之後的單詞總數是769198,用ch之後的單詞總數是535625,相比較修改後的程式結果更精確了,截圖為證:
四、再次profile
再次profile,截圖如下:
第三週作業(3) 詞頻統計 效能分析
效能分析作業具體要求如下 一 要求 以 戰爭與和平 作為輸入檔案,重讀向由檔案系統讀入。次數時間 第一次33.972s 第二次35.884s 第三次34.393s 平均時間 通過使用 ptime.exe測試執行時間發現自己的 執行具體有多慢,我猜測程式的瓶頸是單詞從檔案中讀取。file fp fp ...
第三週作業
實驗作業 1.輸入課本各個例題,除錯執行程式,並分析程式,將每乙個程式改寫2到3個版本,自己分析程式結果,然後再除錯執行,核對分析結果的對錯。2.編寫程式輸入乙個三角形的三條邊,計算其面積和周長 3.編寫程式計算並輸出課本本章習題3表示式的值並分析結果。4.編寫乙個程式,輸入乙個一元二次方程的三個係...
第三週作業
要求 1.輸入課本各個例題,除錯執行程式,並分析程式,將每乙個程式改寫2到3個版本,自己分析程式結果,然後再除錯執行,核對分析結果的對錯。2.編寫程式輸入乙個三角形的三條邊,計算其面積和周長 3.編寫程式計算並輸出課本本章習題3表示式的值並分析結果。4.編寫乙個程式,輸入乙個一元二次方程的三個係數,...