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

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è)試就沒(méi)什么辦法,經(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);

 //開(kāi)始的時(shí)候沒(méi)有這層循環(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#實(shí)現(xiàn)語(yǔ)音視頻錄制-附demo源碼

    C#實(shí)現(xiàn)語(yǔ)音視頻錄制-附demo源碼

    在很多語(yǔ)言視頻軟件系統(tǒng)中,經(jīng)常有將實(shí)時(shí)的音頻或者是視頻錄制為文件保存到磁盤空間的需求,本篇給大家講C#實(shí)現(xiàn)語(yǔ)音視頻錄制-附demo源碼,感興趣的朋友一起來(lái)學(xué)習(xí)吧
    2015-08-08
  • C#實(shí)現(xiàn)飛行棋項(xiàng)目

    C#實(shí)現(xiàn)飛行棋項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)飛行棋項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C#裝箱和拆箱的原理介紹

    C#裝箱和拆箱的原理介紹

    這篇文章介紹了C#裝箱和拆箱的原理,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • c#連接access數(shù)據(jù)庫(kù)操作類分享

    c#連接access數(shù)據(jù)庫(kù)操作類分享

    本文介紹了c#連接access數(shù)據(jù)庫(kù)的方法,可以執(zhí)行刪除、更新、插入等操作,大家參考使用吧
    2014-01-01
  • c#實(shí)現(xiàn)sunday算法實(shí)例

    c#實(shí)現(xiàn)sunday算法實(shí)例

    Sunday算法思想跟BM算法很相似,在匹配失敗時(shí)關(guān)注的是文本串中參加匹配的最末位字符的下一位字符,下面是用C#實(shí)現(xiàn)sunday的實(shí)例代碼,有需要的朋友可以參考一下
    2013-08-08
  • WPF實(shí)現(xiàn)窗體中的懸浮按鈕

    WPF實(shí)現(xiàn)窗體中的懸浮按鈕

    這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)窗體中的懸浮按鈕,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 分享WCF聊天程序--WCFChat實(shí)現(xiàn)代碼

    分享WCF聊天程序--WCFChat實(shí)現(xiàn)代碼

    無(wú)意中在一個(gè)國(guó)外的站點(diǎn)下到了一個(gè)利用WCF實(shí)現(xiàn)聊天的程序,作者是:Nikola Paljetak。研究了一下,自己做了測(cè)試和部分修改,感覺(jué)還不錯(cuò),分享給大家
    2015-11-11
  • .NET中的Timer類型用法詳解

    .NET中的Timer類型用法詳解

    這篇文章主要介紹了.NET中的Timer類型用法,較為詳細(xì)的分析了Timer類型在各種環(huán)境下的用法,需要的朋友可以參考下
    2014-08-08
  • c# 以二進(jìn)制讀取文本文件

    c# 以二進(jìn)制讀取文本文件

    在當(dāng)前目錄創(chuàng)建一個(gè)文件myfile.txt,對(duì)該文件具有讀寫權(quán)限
    2009-07-07
  • 關(guān)于c#中單例模式的一些問(wèn)題

    關(guān)于c#中單例模式的一些問(wèn)題

    這篇文章主要給大家介紹了關(guān)于c#中單例模式的一些問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論