Stopwatch 可以測(cè)量一個(gè)時(shí)間間隔的運(yùn)行時(shí)間,也可以測(cè)量多個(gè)時(shí)間間隔的總運(yùn)行時(shí)間。一般用來(lái)測(cè)量代碼執(zhí)行所用的時(shí)間或者計(jì)算性能數(shù)據(jù),在優(yōu)化代碼性能上可以使用Stopwatch來(lái)測(cè)量時(shí)間。
使用的時(shí)候需要引用System.Diagnostics命名空間。先調(diào)用 Start 方法,然后調(diào)用 Stop 方法,最后使用 Elapsed 屬性或者使用ElapsedMilliseconds屬性得到運(yùn)行時(shí)間(這兩個(gè)屬性的區(qū)別是前者得到的是TimeSpan實(shí)例,后者得到的是毫秒)。使用 IsRunning 可以確定 Stopwatch 的當(dāng)前狀態(tài)是正在運(yùn)行還是已經(jīng)停止。每次調(diào)用 Start 時(shí)開(kāi)始累計(jì)運(yùn)行時(shí)間計(jì)數(shù);每次調(diào)用 Stop 時(shí)結(jié)束當(dāng)前時(shí)間間隔測(cè)量,并凍結(jié)累計(jì)運(yùn)行時(shí)間值。 使用 Reset 方法可以清除現(xiàn)有 Stopwatch 實(shí)例中的累計(jì)運(yùn)行時(shí)間。
下面的示例演示如何使用Stopwatch類來(lái)確定應(yīng)用程序的執(zhí)行時(shí)間:

Stopwatch stopwatch = new Stopwatch(); //第一次計(jì)時(shí) stopwatch.Start(); Console.WriteLine("Stopwatch is running:{0}",stopwatch.IsRunning);//判斷當(dāng)前Stopwatch的狀態(tài) System.Threading.Thread.Sleep(1000);//耗時(shí)操作 stopwatch.Stop(); Console.WriteLine("Using Elapsed output runTime:{0}", stopwatch.Elapsed.ToString());//這里使用時(shí)間差來(lái)輸出 Console.WriteLine("Using ElapsedMilliseconds output runTime:{0}", stopwatch.ElapsedMilliseconds);//這里面使用毫秒來(lái)輸出 Console.WriteLine("==================================================="); //第二次計(jì)時(shí) stopwatch.Start(); System.Threading.Thread.Sleep(1000);//耗時(shí)操作 stopwatch.Stop(); Console.WriteLine("The second RunTime:{0}", stopwatch.ElapsedMilliseconds);//這里面使用毫秒來(lái)輸出 Console.WriteLine("==================================================="); //第三次計(jì)時(shí)(這里使用了Restart) stopwatch.Restart();//這里使用Restart來(lái)啟動(dòng)計(jì)時(shí)(會(huì)把前面的時(shí)間清空) System.Threading.Thread.Sleep(1000);//耗時(shí)操作 stopwatch.Stop(); Console.WriteLine("Using Restart, so runTime:{0}", stopwatch.ElapsedMilliseconds);//這里面使用毫秒來(lái)輸出 Console.ReadKey();View Code運(yùn)行結(jié)果:
備注:程序中我Sleep 了1000ms 但是輸入結(jié)果是第一次是1002 第二次是2003 最后是1000,有一定的誤差跟電腦性能和當(dāng)前CPU的狀態(tài)有關(guān)系(這里我是猜測(cè)的)。
在實(shí)際的項(xiàng)目中,有時(shí)候我們無(wú)法使用Console.WriteLine() 或者 MessageBox.Show()來(lái)得到運(yùn)行時(shí)間,這時(shí)候我們就需要把時(shí)間寫進(jìn)一個(gè)文本文件中。
下面的示例演示如何使用Stopwatch類來(lái)確定應(yīng)用程序的執(zhí)行時(shí)間并把時(shí)間輸出到文本文件中(這里我為了簡(jiǎn)單使用的是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);//耗時(shí)操作 stopwatch.Stop(); streamWriter.WriteLine("RunTime:{0}", stopwatch.ElapsedMilliseconds);//以毫秒的形式寫進(jìn)文件 streamWriter.Flush(); }View Code運(yùn)行結(jié)果:

C#中用于計(jì)時(shí)的操作不只是 Stopwatch 還有其他的如 Timer、TimeSpan 等。我這里只是用Stopwatch來(lái)舉個(gè)例子。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注