作業總結


經過一天的優化和測試后,我深刻的感覺到需要一篇總結來總結經驗教訓。

今天遇到的最大的問題是內存管理的問題。

在之前的簡單樣例中,這本不是一個問題,但是當我今天換了一個100多MB的文件夾當樣例后,一切都不一樣了。

我的簡簡單單的9KB的程序居然調用了1.2G的內存長達4分鍾,而其他同學的程序大約調用內存100MB以內。

如上圖占用內存1316MB

經過分析我發現我的內存主要是存在於存儲中。

for(...)

{

Word a = new Word(str[i], str[i].ToLower(), 1);
wordlist.Add(a);

}

就是以上的代碼占用了1.2G的內存。

我無條件的存儲了所有的單詞,包括了完全一樣重復的(我想要先全部存儲,再處理,這樣不用檢索時間)。

對於這么大的文件量統計出的所有單詞,每個單詞建立一個對象存儲入List集合中,自然也就會占用大量內存。

而其他的同學會判斷是否存在相同的,如果不同才重新建立對象存入。

那么我又有了一個問題,如果檢索判斷,那么對於每個單詞都在List中需要一個O(n)的檢索歷程。

所以繼而引發的是數據結構的問題了,List中檢索太慢,我就換成了Hashtable,實現O(1)的檢索。

這樣改變后,由於重復對象在存儲前已經合並,占用內存大大降低,時間也節約了不少。

如下圖時間降為77秒:(樣本也降低了不少)

如上圖內存占用降為67MB

 

所以軟件工程與以前的程序不同,需要考慮大樣本,不僅要考慮到運行時間還要考慮到內存調用。z


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM