熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

使用Stopwatch類進行速度測試

2013-11-13 10:10:30  來源: .NET編程 

  軟件的運行速度必須要在用戶可以接受的范圍內通常改善那些短暫的但頻繁使用的例程的速度會大幅度地提高軟件的整體速度
   要改善速度當然首先要能夠量度時間那我們考慮一下在跑道上的情況槍聲一響馬上按下秒表開始計時在選手到達終點那一刻結束計時這時就可以知道該選手所用的時間了要開始對下一輪比賽計時前要先將秒表歸零NET也提供了這樣一個秒表Stopwatch類它可以比較精確地測量時間
   速度測試
   軟件的性能和可測性是一個復雜的主題要確保應用程序能夠滿足用戶的期望就需要在開發周期內考慮它的性能和可測性這在設計階段至關重要一個糟糕的設計幾乎肯定會導致糟糕的用戶體驗然而僅僅有好的設計也不能保證程序能夠高效地運行最終代碼的質量同樣重要
   量度一個運行時間較長的例程相當簡單如果一個過程會持續幾分鐘只要一塊腕表就可以記錄它的時間了比如一個執行時間為兩分鐘的過程%的改善能夠節省這是很容易去確定的
   而如果要測量一個非常短暫的過程就要考慮更好的精確性了比如有一些很小的例程它們的運行時間可能只有千分之一秒但會被調用萬次這樣的累積效果就明顯了NET framework的先前版本中需要使用Windows API函數而在NET framework 微軟引入了Stopwatch(它就是我們的秒表)類來簡化時間的量度任務
   Stopwatch類:
   使用Stopwatch類來量度時間非常簡單跟現實生活中的秒表一樣這個類的對象也能夠對計數器進行開始停止歸零(重置)操作不過它可比一般的秒表精確多了它能夠精確到微秒(也就是百萬分之一秒)
   示例代碼
   要演示Stopwatch的使用還是來段代碼吧下面是一個控制台應用程序它將萬之間的所有整數累加
  
  
   using System;
  
   namespace StopWatchClass
   {
   class Program
   {
   static void Main(string[] args)
   {
   long total = ;
  
   for (int i = ; i <= ; i++)
   {
   total += i;
   }
   }
   }
   }

  添加Stopwatch對象
   Stopwatch類位於SystemDiagnostics命名空間下面是添加對象後的代碼
   using System;
   using SystemDiagnostics;
  
   namespace StopWatchClass
   {
   class Program
   {
   static void Main(string[] args)
   {
   Stopwatch timer = new Stopwatch();
   long total = ;
  
   for (int i = ; i <= ; i++)
   {
   total += i;
   }
   }
   }
   }
   控制Stopwatch對象
   Stopwatch提供了幾個方法用以控制Stopwatch對象Start方法開始一個計時操作Stop方法停止計時此時如果第二次使用Start方法將繼續計時最終的計時結果為兩次計時的累加為避免這種情況在第二次計時前用Reset方法將對象歸零這三個方法都不需要參數代碼是
   using System;
   using SystemDiagnostics;
  
   namespace StopWatchClass
   {
   class Program
   {
   static void Main(string[] args)
   {
   Stopwatch timer = new Stopwatch();
   long total = ;
  
   timerStart();
   for (int i = ; i <= ; i++)
   {
   total += i;
   }
  
   timerStop();
   }
   }
   }
   讀取Stopwatch結果
  <![if !supportLists]><![endif]> 在結束計時後下一步就是讀取計時結果了Stopwatch類提供了一下屬性
  <![if !supportLists]><![endif]><![if !supportLists]><![endif]>
  Elapsed返回一個TimeSpan對象表示計時時間間隔
  ElapsedMilliseconds返回計時經過的微秒數精確度稍差適合於稍長一點的計時
  ElapsedTicks返回計時經過的計時器刻度(timer tick)數計時器刻度是Stopwatch對象可能的最小量度單位計時器刻度時間的長度由特定的計算機和操作系統確定Stopwatch對象的Frequency靜態字段的值表示一秒所包含的計時器刻度數注意它與TimeSpan的Ticks屬性所用的時間單位的區別
   應當根據計時任務的情況選擇其中的一個屬性在我們的示例程序中Elapsed屬性提供了需要的精確度用它來輸出經過的微秒數這也是TimeSpan的最高精確度了
   下面是最終的程序代碼
  
  
   using System;
   using SystemDiagnostics;
  
   namespace StopWatchClass
   {
   class Program
   {
   static void Main(string[] args)
   {
   Stopwatch timer = new Stopwatch();
   long total = ;
  
   timerStart();
   for (int i = ; i <= ; i++)
   {
   total += i;
   }
  
   timerStop();
  
   decimal micro = timerElapsedTicks / m;
   ConsoleWriteLine(Execution time was {:F} microseconds micro);
   }
   }
   }
   另外使用IsRunning屬性可以查看一個Stopwatch實例是否正在計時使用StartNew方法可以開始一個新的計時器


From:http://tw.wingwit.com/Article/program/net/201311/12795.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.