程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#實現測量程序運行時間及cpu使用時間

C#實現測量程序運行時間及cpu使用時間

編輯:關於C語言

對一個服務器程序想統計每秒可以處理多少數據包,要如何做?答案是用處理數據包的總數,除以累記處理數據包用的時間。這裡要指出的是, 運行一段程序,使用的cpu時間,跟實際運行的時間是不一樣的。附例如下:

private void ShowRunTime()
      {
      TimeSpan ts1 = Process.GetCurrentProcess().TotalProcessorTime;
      Stopwatch stw = new Stopwatch();
      stw.Start();
      int Circles = 1000;
      for (int i = 0; i < Circles; ++i)
      {
        Console.WriteLine(i.ToString());
      }
      double Msecs = Process.GetCurrentProcess().TotalProcessorTime.Subtract(ts1).TotalMilliseconds;
      stw.Stop();
      Console.WriteLine(string.Format("循環次數:{0} CPU時間(毫秒)={1} 實際時間(毫秒)={2}", Circles, Msecs, stw.Elapsed.TotalMilliseconds, stw.ElapsedTicks));
      Console.WriteLine(string.Format("1 tick = {0}毫秒", 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毫秒,基本可以滿足測量精度。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved