構造函數
Stopwatch() 初始化 Stopwatch 類的新實例。
屬性
Elapsed 獲取當前實例測量得出的總運行時間。 ElapsedMilliseconds 獲取當前實例測量得出的總運行時間(以毫秒為單位)。 ElapsedTicks 獲取當前實例測量得出的總運行時間(用計時器刻度表示)。 IsRunning 獲取一個值,該值表示 Stopwatch 計時器是否正在運行。
方法
Equals(Object) 確定指定的對象是否等于當前對象。(繼承自 Object。) Finalize() 在垃圾回收將某一對象回收前允許該對象嘗試釋放資源并執(zhí)行其他清理操作。(繼承自 Object。) GetHashCode() 作為默認哈希函數。(繼承自 Object。) GetTimestamp() 獲取計時器機制中的當前刻度數。 GetType() 獲取當前實例的 Type。(繼承自 Object。) MemberwiseClone() 創(chuàng)建當前 Object 的淺表副本。(繼承自 Object。) Reset() 停止時間間隔測量,并將運行時間重置為零。 Restart() 停止時間間隔測量,將運行時間重置為零,然后開始測量運行時間。 Start() 開始或繼續(xù)測量某個時間間隔的運行時間。 StartNew() 初始化新的 Stopwatch 實例,將運行時間屬性設置為零,然后開始測量運行時間。 Stop() 停止測量某個時間間隔的運行時間。 ToString() 返回表示當前對象的字符串。(繼承自 Object。)
字段
Frequency 獲取以每秒刻度數表示的計時器頻率。 此字段為只讀。 IsHighResolution 指示計時器是否基于高分辨率性能計數器。 此字段為只讀。
一個 Stopwatch 實例可以測量運行時間為一個時間間隔或所用的時間合計多個間隔。 在典型 Stopwatch 方案中,調用 Start 方法,然后最終調用 Stop 方法,然后檢查經過的時間使用 Elapsed 屬性。
一個 Stopwatch 實例正在運行或已停止; 使用 IsRunning 來確定的當前狀態(tài) Stopwatch。 使用 Start 開始測量運行時間; 使用 Stop 停止測量運行時間。 查詢運行時間值通過屬性 Elapsed, ,ElapsedMilliseconds, ,或 ElapsedTicks。 正在運行或已停止實例時,您可以查詢運行時間屬性。 屬性則穩(wěn)步增多的已用時間而 Stopwatch 是運行; 它們保持不變時停止該實例。
默認情況下,運行時間值的 Stopwatch 實例等于所有規(guī)定的時間間隔的合計。 每次調用 Start 開始計數累計的運行時間; 每次調用 Stop 結束當前的時間間隔測量,并會凍結的累計運行時間值。 使用 Reset 方法清除中現(xiàn)有的累計已用時間 Stopwatch 實例。
Stopwatch 通過計算基礎計時器機制中的計時器刻度來測量運行時間。 如果已安裝的硬件和操作系統(tǒng)支持高分辨率性能計數器,則 Stopwatch 類使用該計數器來測量運行時間。 否則為 Stopwatch 類使用系統(tǒng)計時器來測量運行時間。 使用 Frequency 和 IsHighResolution 字段來確定的精度和解決方法 Stopwatch 計時實現(xiàn)。
Stopwatch 類托管代碼中與計時相關的性能計數器的操作提供幫助。 具體而言, Frequency 字段和 GetTimestamp 方法可用來代替非托管的 Win32 Api QueryPerformanceFrequency 和 QueryPerformanceCounter。
說明
在多處理器計算機上,它并不重要哪個處理器運行的線程。 但是,由于在 BIOS 或硬件抽象層 (HAL) 中的 bug,您可能會在不同的處理器得到不同的計時結果。 若要指定一個線程的處理器關聯(lián),請使用 ProcessThread.ProcessorAffinity 方法。
下面的示例演示如何使用 Stopwatch 類來確定應用程序的執(zhí)行時間:
Stopwatch stopwatch = new Stopwatch(); //第一次計時 stopwatch.Start(); Console.WriteLine("Stopwatch is running:{0}",stopwatch.IsRunning);//判斷當前Stopwatch的狀態(tài) System.Threading.Thread.Sleep(1000);//耗時操作 stopwatch.Stop(); Console.WriteLine("Using Elapsed output runTime:{0}", stopwatch.Elapsed.ToString());//這里使用時間差來輸出 Console.WriteLine("Using ElapsedMilliseconds output runTime:{0}", stopwatch.ElapsedMilliseconds);//這里面使用毫秒來輸出 Console.WriteLine("==================================================="); //第二次計時 stopwatch.Start(); System.Threading.Thread.Sleep(1000);//耗時操作 stopwatch.Stop(); Console.WriteLine("The second RunTime:{0}", stopwatch.ElapsedMilliseconds);//這里面使用毫秒來輸出 Console.WriteLine("==================================================="); //第三次計時(這里使用了Restart) stopwatch.Restart();//這里使用Restart來啟動計時(會把前面的時間清空) System.Threading.Thread.Sleep(1000);//耗時操作 stopwatch.Stop(); Console.WriteLine("Using Restart, so runTime:{0}", stopwatch.ElapsedMilliseconds);//這里面使用毫秒來輸出 Console.ReadKey();
運行結果:
備注:程序中我 Sleep 了1000ms 但是輸入結果是第一次是1002 第二次是2003 最后是1000,有一定的誤差跟電腦性能和當前CPU的狀態(tài)有關系(這里我是猜測的)。
在實際的項目中,有時候我們無法使用Console.WriteLine() 或者 MessageBox.Show()來得到運行時間,這時候我們就需要把時間寫進一個文本文件中。
下面的示例演示如何使用 Stopwatch 類來確定應用程序的執(zhí)行時間并把時間輸出到文本文件中(這里我為了簡單使用的是 StreamWriter):
const string path = @"D:\StopwatchDemo.txt"; using (StreamWriter streamWriter = new StreamWriter(path, true, Encoding.UTF8)) { streamWriter.WriteLine("Start"); streamWriter.Flush(); Stopwatch stopwatch = Stopwatch.StartNew(); System.Threading.Thread.Sleep(1000);//耗時操作 stopwatch.Stop(); streamWriter.WriteLine("RunTime:{0}", stopwatch.ElapsedMilliseconds);//以毫秒的形式寫進文件 streamWriter.Flush(); }
按 Ctrl+C 復制代碼
運行結果:
C#中用于計時的操作不只是 Stopwatch 還有其他的如 Timer、TimeSpan 等。我這里只是用Stopwatch來舉個例子。
默認情況 下,Stopwatch 實例的運行時間值相當于所有測量的時間間隔的總和。每次調用 Start 時開始累計運行時間計數;每次調用 Stop 時結束當前時間間隔測量,并凍結累計運行時間值。使用 Reset 方法可以清除現(xiàn)有 Stopwatch 實例中的累計運行時間。
Stopwatch在基礎計時器機制中對計時器的刻度進行計數,從而測量運行時間。如果安裝的硬件和操作系統(tǒng)支持高分辨率性能的計數器,則 Stopwatch 類將使用該計數器來測量運行時間;否則,Stopwatch 類將使用系統(tǒng)計數器來測量運行時間。使用 Frequency 和 IsHighResolution 字段可以確定實現(xiàn) Stopwatch 計時的精度和分辨率。
示例
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); //任務 1... stopwatch.Stop(); _result.Text += "<p>任務 1 用時:" + stopwatch.ElapsedTicks + "。</p>"; stopwatch.Reset(); //若沒有 Reset,則會把任務 1 的用時累計進入任務 2 stopwatch.Start(); //任務 2... stopwatch.Stop(); _result.Text += "<p>任務 2 用時:" + stopwatch.ElapsedTicks + "。</p>";
如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網友會為你解答??! 點擊進入論壇