欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#?Stopwatch實現(xiàn)計算代碼運行時間

 更新時間:2024年03月13日 08:21:55   作者:CodeOfCC  
這篇文章主要為大家詳細介紹了C#如何使用Stopwatch實現(xiàn)計算代碼運行時間,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

前言

我們編寫程序時,有時需要統(tǒng)計代碼運行時間,比如記錄視頻解碼耗時,以及視頻的播放幀率等以確認性能滿足,或者記錄代碼運行時長作為優(yōu)化的依據。通常的做法是定義一個變量記錄起始時間,在結束時獲取當前時間減去起始時間,本文將上述操作封裝為一些對象方便使用。

一、計算范圍時間

我們使用Stopwatch就很容易做到。

1、起始位置

 Stopwatch _sw = Stopwatch.StartNew();
_sw.Start();

2、結束位置

 _sw.Stop();

3、獲取時間

//單位秒
Time = _sw.ElapsedMilliseconds / 1000.0;

封裝成對象

(1)完整代碼

public class RangeCodeTime
{
    Stopwatch _sw = Stopwatch.StartNew();
    Queue<double> _times = new Queue<double>();
    double _sum = 0;
    int _maxAvgCount = 0;
    /// <summary>
    /// 當前耗時時,單位秒
    /// </summary>
    public double Time { get; set; }
    /// <summary>
    /// 平均耗時時,單位秒
    /// </summary>
    public double Average { get; set; }
    /// <summary>
    /// 構造方法
    /// </summary>
    /// <param name="maxAvgCount">計算平均總共個數(shù)</param>
    public RangeCodeTime(int maxAvgCount = 60)
    {
        _maxAvgCount = maxAvgCount;
    }
    /// <summary>
    /// 開始點
    /// </summary>
    public void Begin()
    {
        _sw.Restart();
    }
    /// <summary>
    /// 結束點
    /// </summary>
    /// <param name="isPrint">是否打印</param>
    /// <param name="printLable">打印的標簽</param>
    public void End(bool isPrint = true, string printLable = "")
    {
        _sw.Stop();
        Time = _sw.ElapsedMilliseconds / 1000.0;
        _times.Enqueue(Time);
        _sum += Time;
        Average = _sum / _times.Count;
        Console.WriteLine(printLable + "當前耗時(s):" + Time + " 平均耗時(s):" + Average);
        if (_times.Count >= _maxAvgCount)
        {
            _sum -= _times.Dequeue();
        }
    }
}

(2)使用示例

RangeCodeTime rct = new RangeCodeTime();
void test()
{
    rct.Beigin();
    //需要計算時長的代碼
    //默認會輸出到控制臺,isPrint=true。也可以在End()之后通過屬性Time、和Average獲取數(shù)據。
    rct.End(printLable: "解碼");
}

效果預覽

二、計算檢查點時間

檢查點通??梢杂糜谟嬎阊h(huán)或者回調的耗時,比如播放視頻過程中放置一個檢查點,就可以計算出幀率。我們還是使用Stopwatch來實現(xiàn)。

1、初始化

Stopwatch _sw = Stopwatch.StartNew();

2、檢查點

if (!_sw.IsRunning)
{
    _sw.Restart();
}
else
{
    _sw.Stop();
    //單位秒
    Time = _sw.ElapsedMilliseconds / 1000.0;
    _sw.Restart();
}

封裝成對象

(1)完整代碼

public class CheckPointCodeTime
{
    Stopwatch _sw = Stopwatch.StartNew();
    Queue<double> _times = new Queue<double>();
    double _sum = 0;
    int _maxAvgCount = 0;
    /// <summary>
    /// 當前耗時時,單位秒
    /// </summary>
    public double Time { get; set; }
    /// <summary>
    /// 平均耗時時,單位秒
    /// </summary>
    public double Average { get; set; }
    /// <summary>
    /// 構造方法
    /// </summary>
    /// <param name="maxAvgCount">計算平均總共個數(shù)</param>
    public CheckPointCodeTime(int maxAvgCount = 60)
    {
        _maxAvgCount = maxAvgCount;
    }
    /// <summary>
    /// 檢查點
    /// </summary>
    /// <param name="isPrint">是否打印</param>
    /// <param name="printLable">打印的標簽</param>
    public void Check(bool isPrint = true, string printLable = "")
    {
        if (!_sw.IsRunning)
        {
            _sw.Restart();
            return;
        }
        _sw.Stop();
        Time = _sw.ElapsedMilliseconds / 1000.0;
        _times.Enqueue(Time);
        _sum += Time;
        Average = _sum / _times.Count;
        Console.WriteLine(printLable + "當前耗時(s):" + Time + " 平均耗時(s):" + Average);
        if (_times.Count >= _maxAvgCount)
        {
            _sum -= _times.Dequeue();
        }
        _sw.Restart();
    }
}

(2)使用示例

CheckPointCodeTime cct= new CheckPointCodeTime();
//接收視頻數(shù)據包回調
void onReceivePacket()
{ 
    //默認會輸出到控制臺,isPrint=true。也可以在Check()之后通過屬性Time、和Average獲取數(shù)據。
   cct.Check(printLable:"接收一幀 ");
  //其他處理
}

效果預覽

總結

本文簡單的Stopwatch進行了一個封裝,主要目的是方便調用,而且也將均值計算出來了,這樣有利于對數(shù)據的統(tǒng)計,總的來說還是有一定適用場景的。

到此這篇關于C# Stopwatch實現(xiàn)計算代碼運行時間的文章就介紹到這了,更多相關C# Stopwatch計算代碼運行時間內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Winform圓形環(huán)繞的Loading動畫實現(xiàn)代碼

    Winform圓形環(huán)繞的Loading動畫實現(xiàn)代碼

    這篇文章主要介紹了Winform圓形環(huán)繞的Loading動畫實現(xiàn)代碼,有需要的朋友可以參考一下
    2014-01-01
  • C#實現(xiàn)鼠標裁剪圖像功能

    C#實現(xiàn)鼠標裁剪圖像功能

    這篇文章主要為大家詳細介紹了C#實現(xiàn)鼠標裁剪圖像功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 簡單聊聊c# 事件

    簡單聊聊c# 事件

    這篇文章主要介紹了c# 事件的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • C#中類的異常處理詳解

    C#中類的異常處理詳解

    大家好,本篇文章主要講的是C#中類的異常處理詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • C#實現(xiàn)字符串與圖片的Base64編碼轉換操作示例

    C#實現(xiàn)字符串與圖片的Base64編碼轉換操作示例

    這篇文章主要介紹了C#實現(xiàn)字符串與圖片的Base64編碼轉換操作,結合實例形式分析了C#針對base64編碼與圖片的相互轉換操作技巧,需要的朋友可以參考下
    2017-06-06
  • c#實現(xiàn)爬蟲程序

    c#實現(xiàn)爬蟲程序

    這篇文章介紹了c#實現(xiàn)爬蟲程序的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C# ODP.NET 調用Oracle函數(shù)返回值時報錯的一個解決方案

    C# ODP.NET 調用Oracle函數(shù)返回值時報錯的一個解決方案

    這篇文章主要介紹了C# ODP.NET 調用Oracle函數(shù)返回值時報錯的一個解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • C# Winfom 中ListBox的簡單用法詳解

    C# Winfom 中ListBox的簡單用法詳解

    這篇文章主要介紹了C# Winfom 中ListBox的簡單用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Http上傳與Ftp上傳的區(qū)別詳解

    Http上傳與Ftp上傳的區(qū)別詳解

    本篇文章是對Http上傳與Ftp上傳的區(qū)別進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • c#:CTS類型系統(tǒng)

    c#:CTS類型系統(tǒng)

    CTS通用類型系統(tǒng),是.Net中一套定義類型的規(guī)則。我們要掌握c#開發(fā),首先要建立這個類型概念,只有知道c#的元素是什么類型,才能進行相關的分析和選材。
    2012-12-12

最新評論