最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#測(cè)量程序運(yùn)行時(shí)間及cpu使用時(shí)間實(shí)例方法

 更新時(shí)間:2013年11月20日 09:10:25   作者:  
對(duì)一個(gè)服務(wù)器程序想統(tǒng)計(jì)每秒可以處理多少數(shù)據(jù)包,要如何做?答案是用處理數(shù)據(jù)包的總數(shù),除以累記處理數(shù)據(jù)包用的時(shí)間,下面我們看一個(gè)代碼實(shí)例就明白了

這里要指出的是, 運(yùn)行一段程序,使用的cpu時(shí)間,跟實(shí)際運(yùn)行的時(shí)間是不一樣的。附例如下:

復(fù)制代碼 代碼如下:

private void ShowRunTime()
  {
   TimeSpan ts1 = Process.GetCurrentProcess().TotalProcessorTime;
   Stopwatch stw = new Stopwatch();
  stw.Start();
  int Circles = 1000;
   for (int i = 0; i < Circles; ++i)
  {
  }
  double Msecs = Process.GetCurrentProcess().TotalProcessorTime.Subtract(ts1).TotalMilliseconds;
  stw.Stop();
    Console.WriteLine(string.Format("循環(huán)次數(shù):{0} CPU時(shí)間(毫秒)={1} 實(shí)際時(shí)間(毫秒)={2}", Circles, Msecs, stw.Elapsed.TotalMilliseconds, stw.ElapsedTicks));
  Console.WriteLine(string.Format("1 tick = {0}毫秒", stw.Elapsed.TotalMilliseconds / stw.Elapsed.Ticks));
 }

程序輸出如下:
循環(huán)次數(shù):1000 CPU時(shí)間(毫秒)=50.072 實(shí)際時(shí)間(毫秒)=666.9071
1 tick = 0.0001毫秒

可以看出在這個(gè)例子中,兩者差距比較大,其原因如下:

1)Windows是多任務(wù)操作系統(tǒng),按照線(xiàn)程為單位對(duì)cpu時(shí)間輪詢(xún)分配。即一個(gè)程序運(yùn)行的中途,可能被剝奪cpu資源,供其他程序運(yùn)行。
2)程序本身會(huì)有不占用cpu時(shí)間的等待過(guò)程。這個(gè)等待可能是我們程序主動(dòng)的,比如啟動(dòng)一個(gè)進(jìn)程,然后等待進(jìn)程的結(jié)束;也可能是我們沒(méi)有意識(shí)到的,如例子 的Console.WriteLine方法,猜想其內(nèi)部進(jìn)行了一系列的異步I/O操作然后等待操作的完成,這其間并沒(méi)有占用調(diào)用進(jìn)程的cpu時(shí)間,但耗費(fèi) 了很多等待時(shí)間。
總結(jié):
1)性能的測(cè)量,應(yīng)該用程序運(yùn)行時(shí)間來(lái)測(cè)量,當(dāng)然也需要使用cpu時(shí)間作為參考,如果兩者差距很大,需要考慮為何出現(xiàn)這種情況。
2).Net的Stopwatch類(lèi)可以精確到1/10000毫秒,基本可以滿(mǎn)足測(cè)量精度。


個(gè)人整理
Elapsed和ElapsedMilliseconds屬性在被調(diào)用時(shí),會(huì)在內(nèi)部調(diào)用kernel32中的QueryPerformanceFrequency()函數(shù)以獲取處理器支持的高精度計(jì)時(shí)器的頻率,隨后用這個(gè)數(shù)字對(duì)獲取的時(shí)間差值進(jìn)行修正,最后Elapsed屬性會(huì)返回一個(gè)新的TimeSpan對(duì)象。而獲取ElapsedTicks屬性時(shí)則不會(huì)進(jìn)行這種高精度的計(jì)算(修正)。但是一般來(lái)說(shuō)這兩者的誤差并不是很大。如果需要精確計(jì)算時(shí)間或是測(cè)試數(shù)據(jù)量特別大的情況下,推薦使用Elapsed和ElapsedMilliseconds屬性。

存在疑問(wèn)
我測(cè)試之后發(fā)現(xiàn)并沒(méi)有像如下所說(shuō)的結(jié)論,我已經(jīng)回復(fù)原作者,暫未得到答復(fù)。希望知道原因的朋友指明下。謝謝。
從內(nèi)部實(shí)現(xiàn)來(lái)看,StopWatch.IsHighresolution = true時(shí),StopWatch.Elapsed.Ticks應(yīng)該等于StopWatch.ElapsedTicks再乘以frequency(頻率的常量)。反之,這2個(gè)數(shù)在IsRunning為true時(shí),應(yīng)該是相等的。所以照理應(yīng)該是StopWatch.Elapsed.Ticks會(huì)比較大。

相關(guān)文章

  • C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(二)

    C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(二)

    這篇文章主要介紹了C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(二),本文講解了internal與protected、private、enum、string的==、傳引用等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 利用Unity制作特寫(xiě)鏡頭的示例代碼

    利用Unity制作特寫(xiě)鏡頭的示例代碼

    這篇文章主要介紹了如何利用Unity制作特寫(xiě)鏡頭效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的參考價(jià)值,感興趣的可以了解一下
    2022-04-04
  • C#導(dǎo)入導(dǎo)出EXCEL文件的代碼實(shí)例

    C#導(dǎo)入導(dǎo)出EXCEL文件的代碼實(shí)例

    這篇文章主要介紹了C#導(dǎo)入導(dǎo)出EXCEL文件代碼實(shí)例,代碼的流程和方法都很詳細(xì),需要的朋友可以參考下
    2014-04-04
  • c# 委托和事件實(shí)例學(xué)習(xí)

    c# 委托和事件實(shí)例學(xué)習(xí)

    今天把委托和事件研究了一個(gè),winForm環(huán)境下,一般的小例子都是字符界面,我為了運(yùn)用一下,寫(xiě)了winForm
    2009-01-01
  • C#開(kāi)啟線(xiàn)程的四種方式小結(jié)

    C#開(kāi)啟線(xiàn)程的四種方式小結(jié)

    在C#中,多線(xiàn)程編程是處理并發(fā)操作、提高程序性能的重要手段,C#提供了多種方式來(lái)創(chuàng)建和管理線(xiàn)程,下面將介紹四種常用的開(kāi)啟線(xiàn)程的方法,并附上相應(yīng)的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2024-06-06
  • 最新評(píng)論

    三原县| 都兰县| 江孜县| 监利县| 彩票| 健康| 汨罗市| 鞍山市| 万山特区| 贞丰县| 竹溪县| 崇州市| 霍山县| 弥渡县| 射阳县| 宝鸡市| 桃园市| 左云县| 秦安县| 怀安县| 阳谷县| 延安市| 永仁县| 绵竹市| 阿克苏市| 博乐市| 沙雅县| 深州市| 达拉特旗| 临猗县| 景东| 伊宁市| 建水县| 宁南县| 会昌县| 建德市| 东光县| 巫山县| 绥棱县| 财经| 海原县|