乙個簡單的效能計數器 CodeTimer

2022-02-18 12:06:56 字數 2419 閱讀 8942

static

class codetimer

);}

首先我們將靜態化建構函式,保證我們每次實用該類的時候,都先呼叫此方法。首先它會把當前執行緒及當前執行緒的優先順序設為最高,確保相對減少作業系統在排程上造成的干擾。然後呼叫一次timer方法進行「預熱」,讓jit將il編譯成本地**。讓time方法盡快「進入狀態」。time方法則是真正用於效能計數的方法。

//

程式監控方法time方法、接受三個引數,名稱,迴圈次數以及需要執行的方法體。

public

static

void time(string name, int iteration, action action)

//監視執行時間,記錄下消耗的時間及cpu時鐘週期

stopwatch watch = new stopwatch();

watch.start();

ulong cycleccount = getcyclecount();

for (int i = 0; i < iteration; i++)

action();

//兩者減得出cpu分配時間

ulong cpucycles = getcyclecount() - cycleccount;

watch.stop();

//恢復控制台預設前景色,並列印出消耗時間及cpu時鐘週期

console.foregroundcolor = currentforecolor;

console.writeline("

執行時間為:

" + watch.elapsedmilliseconds.tostring("

n0") + "

ms");

console.writeline("

cup分配的時間片為:

" + cpucycles.tostring("

n0"));

//迴圈輸出列印執行過程中垃圾**次數(這裡對整個託管堆裡面進行)

for (int i = 0; i <= gc.maxgeneration; i++)

console.writeline();}//

獲取執行緒在核心態和使用者態占用的時間

private

static

ulong getcyclecount()

[dllimport("

kernel32.dll

")][return: marshalas(unmanagedtype.bool)]

static

extern

bool querythreadcycletime(intptr threadhandle, ref

ulong cycletime);

[dllimport("

kernel32.dll

")]static

extern intptr getcurrentthread();

}

與傳統計數方法相比,這段**還輸出了更多的資訊,cpu時鐘週期(時間輪渡方法所賦予該程式的時間),以及垃圾**次數,cpu時鐘週期是效能計數器中的輔助參考。說明cpu分配了多多少時間片給這段函式執行,它和消耗時間沒有必然聯絡。

測試一:

例如thread.sleep方法會讓cpu暫停對當前執行緒的「供給」,這樣雖然消耗了時間,但是節省了cpu時鐘週期:

codetimer.time("

thread sleep

", 1, () => );

codetimer.time("

empty method

", 10000000, () => );

執行結果:

而垃圾收集次數的統計,即直觀地反應了方法資源分配(消耗)的規模:

測試二:

console.writeline("

---------string和stringbuilder的比較--------------

");string s=string.empty;

codetimer.time("

string +

", 1, () =>

);stringbuilder sb = new stringbuilder();

codetimer.time("

string building

d");

});console.readline();

執行結果如下:

可以看出顯然stringbuilder效能優越性要高的很多...

蝴蝶計數器 乙個簡單易用的網頁計數器

有懂前端的小夥伴對這個專案感興趣可以聯絡我哦 2020年4月29號 統計部落格訪問量突破1000000!2020年3月22號 蝴蝶計數器網域名稱正式更改為 www.bfcounter.vip 2020年2月20號 總使用者量243 統計部落格訪問量 589056次!2019年10月30號 蝴蝶計數器...

分享乙個秒計數器

有此時候我們需要大概計算一些過程在1秒中處理的數量,net雖然提供了一些計時方法如stopwatch計算 執行所損耗的時間,但並沒有提供每秒執行的計數.為了方便解決這種需要因此實現了乙個簡單秒計數器來完成這些功能,也順便分享這樣乙個小小的類.假設我們現在有兩個執行緒處理方法,而方法裡是不停地去處理一...

關於WCF的效能計數器

公司的專案的服務端採用wcf,現在使用者反應系統響應慢 其實系統高峰期頂多100個人在用 現在boss讓我查查效能的瓶頸在哪。由於wcf的配置檔案只自定義的 採用這樣的框架現在我在myservicehost.cs 這個類裡新增servicemodel.diagnostic.performanceco...