我們都知道在實際做專案時,有一條**原則,就是先實現其功能,在優化其效能。當我們功能都沒有實現的時候,就考慮其效能優化,想一次性就寫出效能最好的方案,顯然是非常有難度的,所以我們先將其功能實現,再逐步優化。
假設現在我們想實現乙個最基礎的相關錯題複習的功能,如我們在網上進行刷題的時候,當我們做錯一到題目的時候,我們可以進行相關題目的針對性複習,在我們網上答題完成後,我們依據我們做錯的題目進行生過一套複習題冊進行複習。
這裡我們假設資料庫中共有2000道題目,每道題目的長度約為800個位元組,我們每次為使用者生成的錯題複習冊中的題目數為80個。
public
class
constants
這裡我們就不引入資料庫了,我們在關鍵取資料的地方使執行緒進行休眠,模擬其耗時。所以我們建立乙個模擬資料庫中題目資料的類public
class
question
public
intgetid()
public string getdetail()
}
首先我們先建立乙個 concurrenthashmap 用於模擬資料庫,儲存所有的題目
然後我們可以生成800個字元,模擬題目詳情
最後我們還使用了我們在 執行緒池(五)—— 定期執行週期任務scheduledthreadpoolexecutor 中學習到的 scheduledthreadpoolexecutor ,我們可以利用這個來進行定時更新資料庫題目。
//啟動定期更新題庫資料任務
updatequestiontimer()
;}//生成隨機字串,模擬題目的實際內容,length表示題目的長度
private
static string makequestiondetail
(int length)
return builder.
tostring()
;}//獲得題目,我們假設一次資料庫的讀耗時在一般在20ms左右,所以休眠20ms
public
static question getquestion
(int index)
catch
(interruptedexception e)
return questionbankmap.
get(index);}
//更新題庫的定時任務
private
static
class
updatebank
implements
runnable
}//定期更新題庫資料
private
static
void
updatequestiontimer()
}這裡我們再定義出待處理的文件,即就是我們根據錯題生成供使用者複習的相關錯題集。
public
class
srcdoc
public string getdocname()
public list
getquestionlist()
}
現在我們生成 60 份題目,進行模擬生成並上傳,檢視其耗時public
class
producedocservice
return
"complete_"
+ system.
currenttimemillis()
+"_"
+ pendingdoc.
getdocname()
+".pdf";}
/** * 上傳文件到網路
** @param docfilename 實際文件在本地的儲存位置
* @return 上傳後的網路儲存位址
*/public
static string uploaddoc
(string docfilename)
catch
(interruptedexception e)
return
""+ docfilename;
}}
執行測試類,發現這也太慢了,因為每份文件生成的時間幾乎差不多,我們就生成 6 份文件,檢視其時間,生成 60 份文件的時間,我們將生成6份文件的耗時剩餘10倍就可以大致得到。public
class
single
system.out.
println
("-----共耗時:"
+(system.
currenttimemillis()
- starttotal)
+"ms-----");
}}
我們可以看到我們乙份文件的生成時間大致在 50 ~ 55 秒左右
我們這裡6個文件生成大概耗時接近 320 秒, 那麼我們 60 份文件大致就需要 3200 秒,50幾分鐘。
上述,我們雖然將其功能完成了,但是這個速度是非常非常慢的了,這才60個人同時使用,就已經非常慢了,萬一我們人數更多,那麼這樣的速度我們肯定是無法接受的了。
優化系統效能
程式框架 hibernate3 struts2 spring2 資料庫 sqlserver2008 伺服器 tomcat6 優化方法 1 配置連線池 採用的c3p0連線池 2 在程式中獲取列表時,用iterator代替list 3 在查詢之後可以使用session.clear 方法釋放快取 4 用資...
Linux系統效能優化
由於各種的i o負載情形各異,linux系統中檔案系統的預設配置一般來說都比較中庸,強調普遍適用性。然而在特定應用下,這種配置往往在i o效能方面不能達到最優。因此,如果應用對i o效能要求較高,除了採用效能更高的硬體 如磁碟 hba卡 cpu mem等 外,我們還可以通過對檔案系統進行效能調優,來...
Android 系統效能優化
android作為一種移動裝置的作業系統,無法像pc機一樣具有強大的記憶體和cpu,這就意味著,我們的android應用程式無法無節制的使用記憶體和cpu資源。很多時候我們過多的使用這些資源時,會導致系統的卡頓或者程式anr。常見的記憶體使用異常主要包括兩種 記憶體溢位和記憶體洩露。記憶體溢位 指的...