對乙個伺服器程式想統計每秒可以處理多少資料報,要如何做?答案是用處理資料報的總數,除以累記處理資料報用的時間。這裡要指出的是, 執行一段程式,使用的cpu時間,跟實際執行的時間是不一樣的。附例如下:
private void showruntime()
double msecs = process.getcurrentprocess().totalprocessortime.subtract(ts1).totalmilliseconds;
stw.stop();
console.writeline(string.format("迴圈次數: cpu時間(毫秒)= 實際時間(毫秒)=", circles, msecs, stw.elapsed.totalmilliseconds, stw.elapsedticks));
console.writeline(string.format("1 tick = 毫秒", stw.elapsed.totalmilliseconds / stw.elapsed.ticks));
}程式輸出如下:
迴圈次數:1000 cpu時間(毫秒)=50.072 實際時間(毫秒)=666.9071
1 tick = 0.0001毫秒
可以看出在這個例子中,兩者差距比較大,其原因如下:
1)windows是多工作業系統,按照執行緒為單位對cpu時間輪詢分配。即乙個程式執行的中途,可能被剝奪cpu資源,供其他程式執行。
2)程式本身會有不占用cpu時間的等待過程。這個等待可能是我們程式主動的,比如啟動乙個程序,然後等待程序的結束;也可能是我們沒有意識到的,如例子的console.writeline方法,猜想其內部進行了一系列的非同步i/o操作然後等待操作的完成,這其間並沒有占用呼叫程序的cpu時間,但耗費了很多等待時間。
總結:1)效能的測量,應該用程式執行時間來測量,當然也需要使用cpu時間作為參考,如果兩者差距很大,需要考慮為何出現這種情況。
2).net的stopwatch類可以精確到1/10000毫秒,基本可以滿足測量精度。
C 測量程式執行時間及cpu使用時間
對乙個伺服器程式想統計每秒可以處理多少資料報,要如何做?答案是用處理資料報的總數,除以累記處理資料報用的時間。這裡要指出的是,執行一段程式,使用的cpu時間,跟實際執行的時間是不一樣的。附例如下 private void showruntime double msecs process.getcur...
timeofday測量程式執行時間
2.時間的測量 有時候我們要計算程式執行的時間.比如我們要對演算法進行時間分析.這個時候可以使用下面這個函式.include int gettimeofday struct timeval tv,struct timezone tz strut timeval gettimeofday將時間儲存在結...
精確測量程式執行時間
作為乙個程式設計師,很多時候都會去關心自己的程式跑的到底有多快,這時就需要對程式的執行時間進行測量。對於不同的程式,它們的執行時間可能相差很大。諸如科學計算類的程式,由於計算量大且演算法的並行化比較差,可能幾天都跑不完。而有的程式的執行時間可能只有幾分鐘甚至不到1ms。不同的時間測量方法,其測量精度...