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

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

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

最近遇到一個(gè)模塊其執(zhí)行時(shí)間非常短,但是調(diào)用頻率非常高。精確計(jì)算其運(yùn)算時(shí)間對(duì)于提高程序整體效率來(lái)說(shuō)非常重要。

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

下面是我使用的代碼:

復(fù)制代碼 代碼如下:

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);

 //需要測(cè)試的模塊

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

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

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

復(fù)制代碼 代碼如下:

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);

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

 QueryPerformanceCounter(ref count1);

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

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

C#中的秒表 計(jì)算程序運(yùn)行了多長(zhǎng)時(shí)間 System.Diagnostics.Stopwatch

復(fù)制代碼 代碼如下:

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í)行時(shí)間: " + myUseTime.ToString() + " ms");
}

相關(guān)文章

  • 在C#中使用MSMQ的方法

    在C#中使用MSMQ的方法

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

    C#使用MSTest進(jìn)行單元測(cè)試

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

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

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

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

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

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

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

    C#實(shí)現(xiàn)3步手動(dòng)建DataGridView的方法

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

    C#使用Consul集群進(jìn)行服務(wù)注冊(cè)與發(fā)現(xiàn)

    這篇文章主要介紹了C#使用Consul集群進(jìn)行服務(wù)注冊(cè)與發(fā)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C#反射應(yīng)用實(shí)例

    C#反射應(yīng)用實(shí)例

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

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

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

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

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

最新評(píng)論

新巴尔虎右旗| 扶沟县| 高邑县| 新津县| 石首市| 闵行区| 吉木乃县| 平罗县| 三门县| 永和县| 蓬安县| 舒城县| 穆棱市| 铅山县| 佛坪县| 五河县| 衡阳县| 高州市| 郯城县| 长沙市| 巫溪县| 信阳市| 兰州市| 离岛区| 鹤岗市| 仪征市| 社旗县| 茶陵县| 寻乌县| 普宁市| 临高县| 大安市| 普兰店市| 丽水市| 江山市| 即墨市| 井冈山市| 永吉县| 万全县| 苗栗市| 夹江县|