最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中Stopwatch的使用及說明

 更新時間:2023年02月25日 09:00:55   作者:TheWindofFate  
這篇文章主要介紹了C#中Stopwatch的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

C# Stopwatch的使用

什么是Stopwatch

Stopwatch:提供一組方法和屬性,可以準確的測量運行時間。

使用的時候需要引用命名空間:System.Diagnostics。

Stopwatch的簡單使用

//創(chuàng)建Stopwatch實例
Stopwatch sw = new Stopwatch();
//開始計時
sw.Start();
for (int i = 0; i < 100; i++)
{
? Console.WriteLine(i);
}
//停止計時
sw.Stop();
Console.WriteLine("用時:" + sw.ElapsedMilliseconds + "");
//重置 停止時間間隔測量,并將運行時間重置為0
sw.Reset();
Console.WriteLine("用時:" + sw.ElapsedMilliseconds + "");
//重啟 停止時間間隔測量,并將運行時間重置為0,然后重新開始測量運行時間
sw.Restart();
for (int i = 0; i < 100; i++)
{
? Console.WriteLine(i);
}
sw.Stop();
//獲取當前實例測量得出的總運行時間(以毫秒為單位)
Console.WriteLine("用時:" + sw.ElapsedMilliseconds + "");
//獲取當前實例測量得出的總運行時間
Console.WriteLine("用時:"+sw.Elapsed);?
//獲取當前實例測量得出的總運行時間(用計時器刻度表示)。
Console.WriteLine(sw.ElapsedTicks);
Console.Read();
//使用StartNew,相當于已經實例化并且啟動計時
Stopwatch sw=Stopwatch.StartNew();
for (int i = 0; i < 100; i++)
{
? Console.WriteLine(i);
}
sw.Stop();
//獲取當前實例測量得出的總運行時間(以毫秒為單位)
Console.WriteLine("用時:" + sw.ElapsedMilliseconds + "");
//獲取當前實例測量得出的總運行時間
Console.WriteLine("用時:"+sw.Elapsed);?
Console.Read();

C#使用Stopwatch精確測量運行時間

一般測量時間間隔使用的是DateTime.Now實例的DateTime.Ticks當前屬性,想要精確測量一個操作的運行時間就只能使用Stopwatch類計時了。

Stopwatch計時精度取決于硬件,如果安裝的硬件和操作系統(tǒng)支持高分辨率性能計數器, 則Stopwatch類將使用該計數器來測量運行時間。否則,Stopwatch類將使用系統(tǒng)計時器來測量運行時間。

測量耗時操作的運行時間

? ? ? ? ? ? Stopwatch stopWatch = new Stopwatch();
? ? ? ? ? ? stopWatch.Start();
? ? ? ? ? ? Thread.Sleep(5000); // 耗時操作
? ? ? ? ? ? stopWatch.Stop();
? ? ? ? ? ??

? ? ? ? ? ? // 將經過的時間作為TimeSpan值
? ? ? ? ? ? TimeSpan ts = stopWatch.Elapsed;
? ? ? ? ? ? // 格式和顯示時間值
? ? ? ? ? ? string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:000}-{4:000}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds, (ts.Ticks * 100 / 1000)%1000);
? ? ? ? ? ? Console.WriteLine("RunTime " + elapsedTime);

? ? ? ? ? ? // 將經過的時間作為毫秒數
? ? ? ? ? ? long mSeconds = stopWatch.ElapsedMilliseconds;
? ? ? ? ? ? Console.WriteLine("RunTime(ms) " + mSeconds);

? ? ? ? ? ? // 獲取經過時間的計時器刻度
? ? ? ? ? ? // 也可在耗時操作前后使用Stopwatch.GetTimestamp()各獲取1個Ticks值,然后相減得到耗時操作花費的計時器刻度
? ? ? ? ? ? // 計時器采用的計時方式不同,tick的時間單位不同
? ? ? ? ? ? long tick = stopWatch.ElapsedTicks;
? ? ? ? ? ? Console.WriteLine("RunTime(tick) " + tick);

? ? ? ? ? ? if (Stopwatch.IsHighResolution)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? // 計時器刻度是高性能計時器滴答數
? ? ? ? ? ? ? ? Console.WriteLine("使用系統(tǒng)高分辨率性能計數器計時:");
? ? ? ? ? ? ? ? Console.WriteLine(" ?RunTime(ns) " +tick* ((1000L * 1000L * 1000L)/ Stopwatch.Frequency));
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? // 計時器刻度是DateTime.Now實例的DateTime.Ticks當前屬性
? ? ? ? ? ? ? ? Console.WriteLine("使用DateTime類計時:");
? ? ? ? ? ? ? ? Console.WriteLine(" ?RunTime(ns) " + tick * 100);
? ? ? ? ? ? }

查看Stopwatch計時器的計時方式

? ? ? ? /// <summary>
? ? ? ? /// 顯示計時器屬性
? ? ? ? /// </summary>
? ? ? ? public static void DisplayTimerProperties()
? ? ? ? {
? ? ? ? ? ? // 顯示定時器頻率和分辨率
? ? ? ? ? ? if (Stopwatch.IsHighResolution)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Console.WriteLine("操作使用系統(tǒng)高分辨率性能計數器計時");
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Console.WriteLine("操作使用DateTime類計時");
? ? ? ? ? ? }

? ? ? ? ? ? long frequency = Stopwatch.Frequency;
? ? ? ? ? ? Console.WriteLine(" ?計時器頻率,單位為每秒滴答數 = {0}",
? ? ? ? ? ? ? ? frequency);
? ? ? ? ? ? long nanosecPerTick = (1000L * 1000L * 1000L) / frequency;
? ? ? ? ? ? Console.WriteLine(" ?計時器分辨率為 {0} 納秒/滴答",
? ? ? ? ? ? ? ? nanosecPerTick);
? ? ? ? }

附上官網上的一個測試實例

? ? ? ? private static void TimeOperations()
? ? ? ? {
? ? ? ? ? ? long nanosecPerTick = (1000L * 1000L * 1000L) / Stopwatch.Frequency;
? ? ? ? ? ? const long numIterations = 10000;

? ? ? ? ? ? // 定義操作標題名稱
? ? ? ? ? ? String[] operationNames = {"操作: Int32.Parse(\"0\")",
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"操作: Int32.TryParse(\"0\")",
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"操作: Int32.Parse(\"a\")",
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"操作: Int32.TryParse(\"a\")"};
? ? ? ? ? ? Console.WriteLine();
? ? ? ? ? ? Console.WriteLine("注:1ticks=100ns,1s=1000ms,1ms=1000us,1us=1000ns");

? ? ? ? ? ? // 從字符串解析整數的四種不同實現
? ? ? ? ? ? for (int operation = 0; operation <= 3; operation++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? // 定義操作統(tǒng)計的變量
? ? ? ? ? ? ? ? long numTicks = 0;
? ? ? ? ? ? ? ? long numRollovers = 0;
? ? ? ? ? ? ? ? long maxTicks = 0;
? ? ? ? ? ? ? ? long minTicks = Int64.MaxValue;
? ? ? ? ? ? ? ? int indexFastest = -1;
? ? ? ? ? ? ? ? int indexSlowest = -1;
? ? ? ? ? ? ? ? long milliSec = 0;

? ? ? ? ? ? ? ? Stopwatch time10kOperations = Stopwatch.StartNew();

? ? ? ? ? ? ? ? // 運行當前操作10001次。
? ? ? ? ? ? ? ? // 第一次執(zhí)行時間將被丟棄,因為它可能會扭曲平均時間。
? ? ? ? ? ? ? ? for (int i = 0; i <= numIterations; i++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? long ticksThisTime = 0;
? ? ? ? ? ? ? ? ? ? int inputNum;
? ? ? ? ? ? ? ? ? ? Stopwatch timePerParse;

? ? ? ? ? ? ? ? ? ? switch (operation)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? case 0:
? ? ? ? ? ? ? ? ? ? ? ? ? ? // 使用try-catch語句分析有效整數
? ? ? ? ? ? ? ? ? ? ? ? ? ? // 啟動新的秒表計時器
? ? ? ? ? ? ? ? ? ? ? ? ? ? timePerParse = Stopwatch.StartNew();
? ? ? ? ? ? ? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? inputNum = Int32.Parse("0");
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? catch (FormatException)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? inputNum = 0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? // 停止計時器,并保存操作所用的計時ticks

? ? ? ? ? ? ? ? ? ? ? ? ? ? timePerParse.Stop();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ticksThisTime = timePerParse.ElapsedTicks;
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? timePerParse = Stopwatch.StartNew();
? ? ? ? ? ? ? ? ? ? ? ? ? ? if (!Int32.TryParse("0", out inputNum))
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? inputNum = 0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? timePerParse.Stop();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ticksThisTime = timePerParse.ElapsedTicks;
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? timePerParse = Stopwatch.StartNew();
? ? ? ? ? ? ? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? inputNum = Int32.Parse("a");
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? catch (FormatException)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? inputNum = 0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? timePerParse.Stop();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ticksThisTime = timePerParse.ElapsedTicks;
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? timePerParse = Stopwatch.StartNew();
? ? ? ? ? ? ? ? ? ? ? ? ? ? if (!Int32.TryParse("a", out inputNum))
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? inputNum = 0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? timePerParse.Stop();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ticksThisTime = timePerParse.ElapsedTicks;
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? // 跳過第一個操作的時間,以防它導致一次性性能下降。
? ? ? ? ? ? ? ? ? ? if (i == 0)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? time10kOperations.Reset();
? ? ? ? ? ? ? ? ? ? ? ? time10kOperations.Start();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? // 更新迭代1-10001的操作統(tǒng)計信息。
? ? ? ? ? ? ? ? ? ? ? ? if (maxTicks < ticksThisTime)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? indexSlowest = i;
? ? ? ? ? ? ? ? ? ? ? ? ? ? maxTicks = ticksThisTime;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? if (minTicks > ticksThisTime)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? indexFastest = i;
? ? ? ? ? ? ? ? ? ? ? ? ? ? minTicks = ticksThisTime;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? numTicks += ticksThisTime;
? ? ? ? ? ? ? ? ? ? ? ? if (numTicks < ticksThisTime)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? // Keep track of rollovers.
? ? ? ? ? ? ? ? ? ? ? ? ? ? numRollovers++;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? // 顯示10000次迭代的統(tǒng)計信息
? ? ? ? ? ? ? ? time10kOperations.Stop();
? ? ? ? ? ? ? ? milliSec = time10kOperations.ElapsedMilliseconds;

? ? ? ? ? ? ? ? Console.WriteLine();
? ? ? ? ? ? ? ? Console.WriteLine("{0} 統(tǒng)計:", operationNames[operation]);
? ? ? ? ? ? ? ? Console.WriteLine(" ?最慢時間: ?第{0}/{1}次操作,時間為{2} ticks",
? ? ? ? ? ? ? ? ? ? indexSlowest, numIterations, maxTicks);
? ? ? ? ? ? ? ? Console.WriteLine(" ?最快時間: ?第{0}/{1}次操作,時間為{2} ticks",
? ? ? ? ? ? ? ? ? ? indexFastest, numIterations, minTicks);
? ? ? ? ? ? ? ? Console.WriteLine(" ?平均時間: ?{0} ticks = {1} ns",
? ? ? ? ? ? ? ? ? ? numTicks / numIterations,
? ? ? ? ? ? ? ? ? ? (numTicks * nanosecPerTick) / numIterations);
? ? ? ? ? ? ? ? Console.WriteLine(" ?{0} 次操作的總時間: {1} ms",
? ? ? ? ? ? ? ? ? ? numIterations, milliSec);
? ? ? ? ? ? }
? ? ? ? }

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Winform界面中實現通用工具欄按鈕的事件處理方法

    Winform界面中實現通用工具欄按鈕的事件處理方法

    下面小編就為大家分享一篇Winform界面中實現通用工具欄按鈕的事件處理方法,具有很好的參考價值,希望對大家有所幫助
    2017-11-11
  • C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡單使用

    C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡單使用

    這篇文章主要介紹了C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡單使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • C#?實現Ping遠程主機功能及代碼演示

    C#?實現Ping遠程主機功能及代碼演示

    這篇文章主要介紹了C#?實現Ping遠程主機功能,本教程將演示1.0.2版本更新功能,以及實現的具體代碼演示,需要的朋友可以參考下
    2024-05-05
  • C#中值類型和引用類型的區(qū)別

    C#中值類型和引用類型的區(qū)別

    這篇文章介紹了C#中值類型和引用類型的區(qū)別,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-03-03
  • C#設計模式之簡單工廠模式

    C#設計模式之簡單工廠模式

    這篇文章介紹了C#設計模式之簡單工廠模式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 淺析C#中數組,ArrayList與List對象的區(qū)別

    淺析C#中數組,ArrayList與List對象的區(qū)別

    在C#中,當我們想要存儲一組對象的時候,就會想到用數組,ArrayList,List這三個對象了。那么這三者到底有什么樣的區(qū)別呢
    2013-07-07
  • C#之Socket客戶端全過程

    C#之Socket客戶端全過程

    這篇文章主要介紹了C#之Socket客戶端全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • c# 計算時間間隔的簡單方法(推薦)

    c# 計算時間間隔的簡單方法(推薦)

    下面小編就為大家?guī)硪黄猚# 計算時間間隔的簡單方法(推薦)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • C#使用is、as關鍵字以及顯式強轉實現引用類型轉換

    C#使用is、as關鍵字以及顯式強轉實現引用類型轉換

    這篇文章介紹了C#使用is、as關鍵字以及顯式強轉實現引用類型轉換的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C#中實現登錄功能的完整步驟

    C#中實現登錄功能的完整步驟

    這篇文章主要給大家介紹了關于C#中實現登錄功能的相關資料,我們在使用C#做項目的時候,基本上都需要制作登錄界面,需要的朋友可以參考下
    2021-06-06

最新評論

宿松县| 攀枝花市| 贞丰县| 棋牌| 北安市| 裕民县| 卫辉市| 河津市| 葫芦岛市| 棋牌| 宣恩县| 辛集市| 桃源县| 临泉县| 云浮市| 绍兴县| 松潘县| 龙南县| 旬阳县| 宿迁市| 嘉禾县| 扶余县| 横峰县| 黄梅县| 布尔津县| 湖州市| 恩平市| 开封市| 玉林市| 佛冈县| 绍兴市| 唐海县| 德昌县| 普兰店市| 大厂| 合作市| 孟津县| 翼城县| 东丽区| 德安县| 延庆县|