程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 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