程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#-用Stopwatch類進行速度測試

C#-用Stopwatch類進行速度測試

編輯:關於C#

軟件的運行速度必須要在用戶可以接受的范圍內。通常,改善那些短暫的但頻繁使用的例 程的速度會大幅度地提高軟件的整體速度。

要改善速度,當然首先要能夠量度時間。 好,那我們考慮一下在跑道上的情況,槍聲一響,馬上按下秒表開始計時,在選手到達終點 那一刻結束計時,這時就可以知道該選手所用的時間了。要開始對下一輪比賽計時前,要先 將秒表歸零。.NET2.0也提供了這樣一個秒表:Stopwatch類,它可以比較精確地測量時間。

速度測試:

軟件的性能和可測性是一個復雜的主題。要確保應用程序能夠滿 足用戶的期望,就需要在開發周期內考慮它的性能和可測性。這在設計階段至關重要,一個 糟糕的設計幾乎肯定會導致糟糕的用戶體驗。然而,僅僅有好的設計也不能保證程序能夠高 效地運行,最終代碼的質量同樣重要。

量度一個運行時間較長的例程相當簡單。如果 一個過程會持續幾分鐘,只要一塊腕表就可以記錄它的時間了。比如一個執行時間為兩分鐘 的過程,10%的改善能夠節省12秒,這是很容易去確定的。

而如果要測量一個非常短 暫的過程,就要考慮更好的精確性了。比如有一些很小的例程,它們的運行時間可能只有千 分之一秒,但會被調用100萬次,這樣的累積效果就明顯了。在.NET framework的先前版本中 ,需要使用Windows API函數,而在.NET framework 2.0中,微軟引入了Stopwatch(它就是 我們的秒表)類來簡化時間的量度任務。

Stopwatch類:

使用Stopwatch類來量 度時間非常簡單。跟現實生活中的秒表一樣,這個類的對象也能夠對計數器進行開始、停止 、歸零(重置)操作,不過它可比一般的秒表精確多了,它能夠精確到微秒(也就是百萬分 之一秒)。

示例代碼:

要演示Stopwatch的使用還是來段代碼吧。下面是一個 控制台應用程序,它將1到100萬之間的所有整數累加:

using System;
  namespace StopWatchClass
  {
    class Program
     {
      static void Main(string[] args)
      {
         long total = 0;
        for (int i = 1; i <= 10000000; i++)
        {
          total += i;
         }
      }
    }
  }

添加 Stopwatch對象:

Stopwatch類位於System.Diagnostics命名空間。下面是添加對象後 的代碼:

using System;
  using System.Diagnostics;
   namespace StopWatchClass
  {
    class Program
    {
      static void Main(string[] args)
      {
         Stopwatch timer = new Stopwatch();
        long total = 0;
        for (int i = 1; i <= 10000000; i++)
         {
          total += i;
        }
      }
    }
  }

控制Stopwatch對象:

Stopwatch提供了 幾個方法用以控制Stopwatch對象。Start方法開始一個計時操作,Stop方法停止計時。此時 如果第二次使用 Start方法,將繼續計時,最終的計時結果為兩次計時的累加。為避免這種 情況,在第二次計時前用Reset方法將對象歸零。這三個方法都不需要參數。代碼是:

using System;
  using System.Diagnostics;
  namespace StopWatchClass
  {
    class Program
    {
       static void Main(string[] args)
      {
         Stopwatch timer = new Stopwatch();
        long total = 0;
         timer.Start();
        for (int i = 1; i <= 10000000; i++)
        {
          total += i;
         }
        timer.Stop();
      }
    }
  }

讀取Stopwatch結果:

在結束計時後下一步就是讀取計時結果 了。Stopwatch類提供了以下屬性:

Elapsed:返回一個TimeSpan對象,表示計時時間 間隔;

ElapsedMilliseconds:返回計時經過的微秒數,精確度稍差,適合於稍長一 點的計時;

ElapsedTicks: 返回計時經過的計時器刻度(timer tick)數。計時器 刻度是Stopwatch對象可能的最小量度單位。計時器刻度時間的長度由特定的計算機和操作系 統確定。Stopwatch對象的 Frequency靜態字段的值表示一秒所包含的計時器刻度數。注意它 與TimeSpan的Ticks屬性所用的時間單位的區別。

應當根據計時任務的情況選擇其中 的一個屬性。在我們的示例程序中,Elapsed屬性提供了需要的精確度,用它來輸出經過的微 秒數。這也是TimeSpan的最高精確度了。

下面是最終的程序代碼:

using System;
  using System.Diagnostics;
  namespace StopWatchClass
  {
    class Program
    {
       static void Main(string[] args)
      {
         Stopwatch timer = new Stopwatch();
        long total = 0;
         timer.Start();
        for (int i = 1; i <= 10000000; i++)
        {
          total += i;
         }
        timer.Stop();
        decimal micro = timer.Elapsed.Ticks / 10m;
        Console.WriteLine("Execution time was {0:F1} microseconds.", micro);
      }
    }
  }

另外,使用IsRunning屬性可以查看一個Stopwatch實例是否正在計時 ,使用StartNew方法可以開始一個新的計時器。

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