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

C#計算代碼執(zhí)行時間的方法

 更新時間:2013年03月21日 11:33:20   作者:  
在一些測試工作時我們需要獲得高精度的代碼執(zhí)行時間以比較其效率。

最近遇到一個模塊其執(zhí)行時間非常短,但是調(diào)用頻率非常高。精確計算其運算時間對于提高程序整體效率來說非常重要。

在我剛剛接觸.Net時,也曾經(jīng)想要測試一下自己寫的程序的運行時間,當時我使用的是將兩個DateTime.Now相減的笨方法,呵呵。后來知道使用Environment.TickCount,對于一般的測試來說就足夠了。但是它對于高精度測試就沒什么辦法,經(jīng)常是返回個0了事。對于高精度測試我們應當使用QueryPerformanceFrequency函數(shù)和QueryPerformanceCounter函數(shù)。通過它們可以獲得比Environment.TickCount更高的精確度。實際上Environment.TickCount就是在調(diào)用QueryPerformanceFrequency函數(shù)和QueryPerformanceCounter函數(shù)。

下面是我使用的代碼:

復制代碼 代碼如下:

using System;

class Class1
{
 [System.Runtime.InteropServices.DllImport ("Kernel32.dll")]
 static extern bool QueryPerformanceCounter(ref long count);

 [System.Runtime.InteropServices.DllImport ("Kernel32.dll")]
 static extern bool QueryPerformanceFrequency(ref long count);

 [STAThread]
 static void Main(string[] args)
 {
 long count = 0;
 long count1 = 0;
 long freq = 0;
 double result = 0;

 QueryPerformanceFrequency(ref freq);
 QueryPerformanceCounter(ref count);

 //需要測試的模塊

 QueryPerformanceCounter(ref count1);
 count = count1-count;
 result = (double)(count)/(double)freq;

 Console.WriteLine("耗時: {0} 秒", result);
 Console.ReadLine();
 }
}

這樣能夠得到非常精確的結(jié)果。但是模塊每次運行的時間總會有些誤差,而當計算非常精確的時候,這些運行時間的誤差也顯得比較明顯了。為此我對其進行循環(huán)多次測試使其誤差平均化,通過多次測試的結(jié)果來進行執(zhí)行效率的分析。

復制代碼 代碼如下:

using System;

class Class1
{
 [System.Runtime.InteropServices.DllImport ("Kernel32.dll")]
 static extern bool QueryPerformanceCounter(ref long count);

 [System.Runtime.InteropServices.DllImport ("Kernel32.dll")]
 static extern bool QueryPerformanceFrequency(ref long count);

 [STAThread]
 static void Main(string[] args)
 {
 long count = 0;
 long count1 = 0;
 long freq = 0;
 double result = 0;

 QueryPerformanceFrequency(ref freq);
 QueryPerformanceCounter(ref count);

 //開始的時候沒有這層循環(huán),所得數(shù)據(jù)浮動很大,添加這層循環(huán)來使得結(jié)果更加平均
 for (int i=0; i<500; i++)
 {
 //需要測試的模塊
 }

 QueryPerformanceCounter(ref count1);

 count = count1-count;
 result = (double)(count)/(double)freq;

 Console.WriteLine("耗時: {0} 秒", result);
 Console.ReadLine();
 }
}

C#中的秒表 計算程序運行了多長時間 System.Diagnostics.Stopwatch

復制代碼 代碼如下:

private void button1_Click(object sender, EventArgs e)
{
Stopwatch myWatch = new Stopwatch();
myWatch.Start();
for (int i = 0; i < 1000; i++)
{
Console.WriteLine("just test" + i);
}
myWatch.Stop();
long myUseTime = myWatch.ElapsedMilliseconds;
MessageBox.Show("執(zhí)行時間: " + myUseTime.ToString() + " ms");
}

相關文章

  • 在C#中使用MSMQ的方法

    在C#中使用MSMQ的方法

    這篇文章主要介紹了在C#中使用MSMQ的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • C#使用MSTest進行單元測試

    C#使用MSTest進行單元測試

    這篇文章介紹了C#使用MSTest進行單元測試的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C# Onnx實現(xiàn)特征匹配DeDoDe檢測

    C# Onnx實現(xiàn)特征匹配DeDoDe檢測

    這篇文章主要為大家詳細介紹了C# Onnx如何實現(xiàn)特征匹配DeDoDe檢測,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-11-11
  • C#動態(tài)創(chuàng)建Access數(shù)據(jù)庫及密碼的方法

    C#動態(tài)創(chuàng)建Access數(shù)據(jù)庫及密碼的方法

    同為微軟的產(chǎn)品,本文將討論的是C#如何創(chuàng)建Access數(shù)據(jù)庫,同時創(chuàng)建數(shù)據(jù)庫密碼與相關操作,希望對大家有所幫助。
    2015-09-09
  • C#中加鹽(salting)的實現(xiàn)示例

    C#中加鹽(salting)的實現(xiàn)示例

    在密碼存儲和驗證中,加鹽是一種增加密碼安全性的技術,本文主要介紹了C#中加鹽(salting)的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • C#實現(xiàn)3步手動建DataGridView的方法

    C#實現(xiàn)3步手動建DataGridView的方法

    這篇文章主要介紹了C#實現(xiàn)3步手動建DataGridView的方法,實例分析了C#實現(xiàn)手動創(chuàng)建DataGridView的原理與技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C#使用Consul集群進行服務注冊與發(fā)現(xiàn)

    C#使用Consul集群進行服務注冊與發(fā)現(xiàn)

    這篇文章主要介紹了C#使用Consul集群進行服務注冊與發(fā)現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • C#反射應用實例

    C#反射應用實例

    這篇文章主要介紹了C#反射應用,實例分析了通過反射實現(xiàn)多系統(tǒng)數(shù)據(jù)庫的配置方法,是比較實用的技巧,需要的朋友可以參考下
    2014-12-12
  • C#中類與接口的區(qū)別個人總結(jié)

    C#中類與接口的區(qū)別個人總結(jié)

    這篇文章主要介紹了C#中類與接口的區(qū)別個人總結(jié),本文講解了類與接口的區(qū)別、接口的用處主要體現(xiàn)在下面幾個方面、一些接口的疑問等內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • c# 使用WebRequest實現(xiàn)多文件上傳

    c# 使用WebRequest實現(xiàn)多文件上傳

    這篇文章主要介紹了c# 使用WebRequest實現(xiàn)多文件上傳的方法,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03

最新評論

文山县| 舞钢市| 兴义市| 印江| 五寨县| 县级市| 图们市| 马山县| 全南县| 潮安县| 石棉县| 淮滨县| 阳山县| 山东省| 浦江县| 咸丰县| 东兰县| 沐川县| 晋江市| 赞皇县| 额济纳旗| 乌兰浩特市| 神木县| 凤山市| 韶山市| 五寨县| 遂平县| 金溪县| 黑龙江省| 安塞县| 邻水| 镶黄旗| 澜沧| 涟水县| 墨江| 太湖县| 图片| 高州市| 乃东县| 兴化市| 平阴县|