系統效能優化(一)

2021-09-28 11:17:26 字數 3011 閱讀 9016

我們都知道在實際做專案時,有一條**原則,就是先實現其功能,在優化其效能。當我們功能都沒有實現的時候,就考慮其效能優化,想一次性就寫出效能最好的方案,顯然是非常有難度的,所以我們先將其功能實現,再逐步優化。

假設現在我們想實現乙個最基礎的相關錯題複習的功能,如我們在網上進行刷題的時候,當我們做錯一到題目的時候,我們可以進行相關題目的針對性複習,在我們網上答題完成後,我們依據我們做錯的題目進行生過一套複習題冊進行複習。

這裡我們假設資料庫中共有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()

}

public

class

producedocservice

return

"complete_"

+ system.

currenttimemillis()

+"_"

+ pendingdoc.

getdocname()

+".pdf";}

/** * 上傳文件到網路

** @param docfilename 實際文件在本地的儲存位置

* @return 上傳後的網路儲存位址

*/public

static string uploaddoc

(string docfilename)

catch

(interruptedexception e)

return

""+ docfilename;

}}

現在我們生成 60 份題目,進行模擬生成並上傳,檢視其耗時

public

class

single

system.out.

println

("-----共耗時:"

+(system.

currenttimemillis()

- starttotal)

+"ms-----");

}}

執行測試類,發現這也太慢了,因為每份文件生成的時間幾乎差不多,我們就生成 6 份文件,檢視其時間,生成 60 份文件的時間,我們將生成6份文件的耗時剩餘10倍就可以大致得到。

我們可以看到我們乙份文件的生成時間大致在 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。常見的記憶體使用異常主要包括兩種 記憶體溢位和記憶體洩露。記憶體溢位 指的...