青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Programmer's Cookbook

{C++ 基礎(chǔ)} {C++ 高級} {C#界面,C++核心算法} {設(shè)計模式} {C#基礎(chǔ)}

使用API實現(xiàn)1/1000秒的性能測試類

?

// ?MbUnit?Test?Framework
// ?
// ?Copyright?(c)?2004?Jonathan?de?Halleux
//
// ?This?software?is?provided?'as-is',?without?any?express?or?implied?warranty.?
// ?
// ?In?no?event?will?the?authors?be?held?liable?for?any?damages?arising?from?
// ?the?use?of?this?software.
// ?Permission?is?granted?to?anyone?to?use?this?software?for?any?purpose,?
// ?including?commercial?applications,?and?to?alter?it?and?redistribute?it?
// ?freely,?subject?to?the?following?restrictions:
//
// ????????1.?The?origin?of?this?software?must?not?be?misrepresented;?
// ????????you?must?not?claim?that?you?wrote?the?original?software.?
// ????????If?you?use?this?software?in?a?product,?an?acknowledgment?in?the?product?
// ????????documentation?would?be?appreciated?but?is?not?required.
//
// ????????2.?Altered?source?versions?must?be?plainly?marked?as?such,?and?must?
// ????????not?be?misrepresented?as?being?the?original?software.
//
// ????????3.?This?notice?may?not?be?removed?or?altered?from?any?source?
// ????????distribution.
// ????????
// ????????MbUnit?HomePage:? http://mbunit.tigris.org
// ????????Author:?Jonathan?de?Halleux

using ?System;
using ?System.Runtime.InteropServices;
using ?System.ComponentModel;
using ?System.Threading;

namespace ?MbUnit.Core.Monitoring
{
????
/// ? <summary>
????
/// ?A?high?performance?timer
????
/// ? </summary>
????
/// ? <remarks>
????
/// ?High?Precision?Timer?based?on?Win32?methods.
????
/// ? </remarks>
????
/// ? <example>
????
/// ?This?example?times?the?execution?of?a?method:
????
/// ? <code>
????
/// ?TimeMonitor?timer?=?new?TimeMonitor();
????
/// ?timer.Start();
????
/// ?????//?execute?code
????
/// ?timer.Stop();
????
/// ?
????
/// ?Console.WriteLine("Duration:?{0}",timer.Duration);
????
/// ? </example>

???? public ? class ?TimeMonitor
????
{
????????[DllImport(
" Kernel32.dll " )]
????????
private ? static ? extern ? bool ?QueryPerformanceCounter( out ? long ?lpPerformanceCount);??

????????[DllImport(
" Kernel32.dll " )]
????????
private ? static ? extern ? bool ?QueryPerformanceFrequency( out ? long ?lpFrequency);
????????
????????
private ? long ?startTime,?stopTime;
????????
private ? long ?now;
????????
private ? long ?freq;
????????
????????
/// ? <summary> Default?constructor </summary>
????????
/// ? <remarks> Initializes?the?timer. </remarks>

???????? public ?TimeMonitor()
????????
{
????????????startTime?
= ? 0 ;
????????????stopTime??
= ? 0 ;

????????????
if ?(QueryPerformanceFrequency( out ?freq)? == ? false )
????????????
{
????????????????
// ?high-performance?counter?not?supported?
???????????????? throw ? new ?Win32Exception();?
????????????}

????????}

????????
????????
/// ? <summary> Gets?the?clock?frequency </summary>
????????
/// ? <value> Clock?frequency </value>

???????? public ? long ?Frequency
????????
{
????????????
get
????????????
{
????????????????
return ? this .freq;
????????????}

????????}

????????
????????
/// ? <summary> Starts?the?timer </summary>
????????
/// ? <remarks> Resets?the?duration?and?starts?the?timer </remarks>

???????? public ? void ?Start()
????????
{
????????????
// ?lets?do?the?waiting?threads?there?work
????????????Thread.Sleep( 0 );??

????????????QueryPerformanceCounter(
out ?startTime);
????????}

????????
????????
/// ? <summary> Stops?the?timer </summary>
????????
/// ? <remarks> Stops?the?timer </remarks>

???????? public ? void ?Stop()
????????
{
????????????QueryPerformanceCounter(
out ?stopTime);
????????}

????????
????????
/// ? <summary> Gets?the?current?duration?value?without?stopping?the?timer </summary>
????????
/// ? <value> Current?duration?value </value>

???????? public ? double ?Now
????????
{
????????????
get
????????????
{
????????????????QueryPerformanceCounter(
out ?now);
????????????????
return ?( double )(now? - ?startTime)? / ?( double )?freq;
????????????}
????????
????????}


????????
/// ? <summary> Gets?the?timed?duration?value?in?seconds </summary>
????????
/// ? <value> Timer?duration </value>

???????? public ? double ?Duration
????????
{
????????????
get
????????????
{
????????????????
return ?( double )(stopTime? - ?startTime)? / ?( double )?freq;
????????????}

????????}

????}

}




c++版的:
High-resolution?timer?for?timing?code?fragments?


Timing?of?code?fragments?
is?simple:?

record?the?start?time?
execute?the?code?
record?the?end?time?
calucate?the?difference?between?end?and?start?
For?timing?exuction?time?of?pieces?of?code?you?need?a?high
-resolution?timer.?On?Windows,?Windows?CE?and?Pocket?PC/Smartphone?(which?are?Windows?CE?variations)?you?can?use?QueryPerformanceCounter?and?QueryPerformanceFrequence?API?calls.?

Here
's?a?simple?implementation?in?C:?

typedef?
struct?prof_timer_t?{
????LARGE_INTEGER?time_start;
????LARGE_INTEGER?time_stop;
}
?prof_timer_t;

void?prof_timer_start(prof_timer_t?*timer)?{
????QueryPerformanceCounter(
&timer->time_start);
}


void?prof_timer_stop(prof_timer_t?*timer)?{
????QueryPerformanceCounter(
&timer->time_stop);
}


double?prof_timer_get_duration_in_secs(prof_timer_t?*timer)?{
????LARGE_INTEGER?freq;
????
double?duration;
????QueryPerformanceFrequency(
&freq);
????duration?
=?(double)(timer->time_stop.QuadPart-timer->time_start.QuadPart)/(double)freq.QuadPart;
????
return?duration;
}


And?
in?C++:?

//?very?simple,?high-precision?(at?least?in?theory)?timer?for?timing?API?calls
struct?ProfTimer?{
????
void?Start(void)?{
????????QueryPerformanceCounter(
&mTimeStart);
????}
;
????
void?Stop(void)?{
????????QueryPerformanceCounter(
&mTimeStop);
????}
;
????
double?GetDurationInSecs(void)
????
{
????????LARGE_INTEGER?freq;
????????QueryPerformanceFrequency(
&freq);
????????
double?duration?=?(double)(mTimeStop.QuadPart-mTimeStart.QuadPart)/(double)freq.QuadPart;
????????
return?duration;
????}


????LARGE_INTEGER?mTimeStart;
????LARGE_INTEGER?mTimeStop;
}
;

And?here
's?an?example?of?using?the?C++?version:?

????ProfTimer?t;
????t.Start();
????foo();
????t.Stop();
????
double?dur?=?t.GetDurationInSecs();
????printf(
"executing?foo()?took?%f?seconds\n"?,?dur);

posted on 2006-06-16 14:07 夢在天涯 閱讀(1730) 評論(1)  編輯 收藏 引用 所屬分類: CPlusPlusC#/.NETVS2005/2008

評論

# re: 性能測試類 2006-06-16 14:26 夢在天涯

GetTickCount()和GetCurrentTime()都只精確到55ms(1個tick就是55ms)。如果要精確到毫秒,應(yīng)該使用timeGetTime函數(shù)或QueryPerformanceCounter函數(shù)。
雖然timeGetTime返回值的單位是1ms,但實際上它的精度只有10ms左右。
如果想提高精度,可以使用QueryPerformanceCounter和QueryPerformanceFrequency。這兩個函數(shù)不是在每個系統(tǒng)中都支持。對于支持它們的系統(tǒng)中,可以獲得低于1ms的精度。Windows 內(nèi)部有一個精度非常高的定時器, 精度在微秒級, 但不同的系統(tǒng)這個定時器的頻率不同, 這個頻率與硬件和操作系統(tǒng)都可能有關(guān)。利用 API 函數(shù) QueryPerformanceFrequency 可以得到這個定時器的頻率。利用 API 函數(shù) QueryPerformanceCounter 可以得到定時器的當(dāng)前值。根據(jù)要延時的時間和定時器的頻率, 可以算出要延時的時間定時器經(jīng)過的周期數(shù)。在循環(huán)里用 QueryPerformanceCounter 不停的讀出定時器值, 一直到經(jīng)過了指定周期數(shù)再結(jié)束循環(huán), 就達(dá)到了高精度延時的目的。  回復(fù)  更多評論   

公告

EMail:itech001#126.com

導(dǎo)航

統(tǒng)計

  • 隨筆 - 461
  • 文章 - 4
  • 評論 - 746
  • 引用 - 0

常用鏈接

隨筆分類

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1812202
  • 排名 - 5

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲无线视频| 国产精品国产三级国产专播精品人| 欧美黄色小视频| 久久综合网hezyo| 欧美激情第三页| 亚洲美女精品一区| 亚洲天堂黄色| 久久精品99无色码中文字幕| 久久综合九色99| 欧美日韩国产大片| 国产欧美一区二区三区沐欲| 国外成人免费视频| 亚洲精品视频在线播放| 亚洲一区二区三区色| 久久国产精品网站| 亚洲第一狼人社区| 99视频一区二区三区| 欧美专区在线观看| 欧美大片一区| 国产午夜精品久久久| 99re66热这里只有精品4| 亚洲欧美日韩国产一区二区| 久久婷婷激情| 在线一区免费观看| 久久综合色婷婷| 国产精品羞羞答答xxdd| 最新国产成人在线观看| 欧美中文字幕不卡| 日韩视频―中文字幕| 欧美专区福利在线| 欧美日韩一级视频| 亚洲人午夜精品免费| 欧美亚洲免费| 亚洲精品国久久99热| 久久久久久久999精品视频| 国产精品福利在线| 在线视频一区二区| 亚洲福利视频网站| 久久久人成影片一区二区三区| 国产精品成人观看视频免费| 亚洲精品乱码久久久久| 猛干欧美女孩| 久久精品论坛| 好吊妞**欧美| 久久国产88| 中文日韩欧美| 国产精品成人一区二区三区夜夜夜 | 宅男噜噜噜66一区二区| 亚洲欧美中文日韩v在线观看| 亚洲黄色在线看| 久久免费视频网站| 国产一区二区精品丝袜| 午夜在线观看欧美| 一本色道久久综合亚洲精品小说| 欧美国产一区视频在线观看| 亚洲第一色中文字幕| 免费不卡欧美自拍视频| 久久成人一区二区| 狠狠色综合网| 欧美电影打屁股sp| 免费的成人av| 亚洲精品美女在线观看| 亚洲黄色免费电影| 欧美 日韩 国产 一区| 亚洲国产美女精品久久久久∴| 久久亚洲欧美国产精品乐播| 欧美专区在线观看一区| 永久免费精品影视网站| 欧美成人午夜| 欧美久久久久久| 亚洲欧美卡通另类91av| 性欧美1819sex性高清| 一区二区三区在线观看视频| 欧美高清影院| 欧美色偷偷大香| 欧美伊人久久久久久午夜久久久久 | 久久夜色精品国产亚洲aⅴ | 国产精品久久久久9999高清| 午夜精品视频| 久久爱另类一区二区小说| 亚洲第一区色| 一区二区高清在线观看| 国产一区二区三区免费在线观看| 久久只有精品| 欧美日韩国产成人在线91| 久久www免费人成看片高清 | 欧美va亚洲va香蕉在线| 在线一区免费观看| 亚欧成人在线| 亚洲美女中文字幕| 亚洲无限乱码一二三四麻| 极品少妇一区二区三区精品视频| 亚洲品质自拍| 国产在线精品自拍| 亚洲国产一区在线| 国产无一区二区| 99国产精品99久久久久久粉嫩| 国产午夜精品在线| 亚洲免费激情| 免费在线播放第一区高清av| 国产精品国产三级国产| 久久久国产91| 欧美日韩在线一区二区| 久久网站热最新地址| 欧美日韩成人在线视频| 乱人伦精品视频在线观看| 欧美日韩在线观看视频| 欧美成人精品一区二区| 国产欧美精品国产国产专区| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品一区二区在线观看不卡| 亚洲国产精品传媒在线观看 | 亚洲日本成人女熟在线观看| 亚洲在线成人精品| 一区二区精品在线观看| 猛男gaygay欧美视频| 久久久国产精品一区| 欧美日韩综合一区| 亚洲电影免费观看高清完整版在线观看 | 美乳少妇欧美精品| 久久久精彩视频| 国产精品日本精品| 一区二区欧美激情| 亚洲欧洲日产国产网站| 久久亚洲春色中文字幕久久久| 久久狠狠亚洲综合| 国产日韩欧美电影在线观看| 亚洲一区国产| 校园激情久久| 国产伦精品一区二区三区高清版 | 亚洲免费在线看| 欧美日本韩国在线| 亚洲免费观看高清完整版在线观看| 最近中文字幕日韩精品 | 性欧美暴力猛交69hd| 午夜激情综合网| 国产精品一区视频网站| 亚洲中字黄色| 久久国产精品一区二区三区四区| 国产精品亚洲网站| 午夜精品久久久久久| 欧美在线观看网址综合| 国产日韩欧美亚洲一区| 欧美在线视频导航| 久热精品视频在线观看一区| 在线播放不卡| 性做久久久久久久免费看| 亚洲欧美日韩精品久久亚洲区| 国产精品人成在线观看免费| 性欧美xxxx大乳国产app| 久久亚洲国产成人| 久久免费视频观看| 一本色道久久88亚洲综合88| 亚洲欧美激情视频| 久久精品国产一区二区三区免费看| 日韩午夜精品| 午夜精品一区二区三区在线播放 | 在线综合亚洲欧美在线视频| 香蕉久久国产| 久久这里只有| 99xxxx成人网| 国产噜噜噜噜噜久久久久久久久| 久久精品91久久香蕉加勒比| 欧美激情片在线观看| 亚洲一区二区三区精品在线观看| 国产精品一香蕉国产线看观看 | 久久综合狠狠综合久久综合88| 亚洲国产欧美精品| 午夜亚洲性色视频| 亚洲国产精品久久久久秋霞影院 | 亚洲美女中出| 国产精品久在线观看| 久久久久国产精品一区二区| 亚洲看片网站| 美日韩丰满少妇在线观看| 日韩亚洲视频在线| 黄色精品一区| 国产精品乱码人人做人人爱| 蜜桃久久精品乱码一区二区| 亚洲视频在线观看三级| 亚洲第一综合天堂另类专| 欧美与黑人午夜性猛交久久久| 亚洲电影下载| 国产婷婷色综合av蜜臀av| 欧美日本在线视频| 卡一卡二国产精品| 亚洲影视九九影院在线观看| 亚洲国产婷婷| 美玉足脚交一区二区三区图片| 亚洲一区制服诱惑| 91久久中文| 伊人久久综合| 国产偷国产偷亚洲高清97cao| 欧美日韩国产首页| 欧美激情麻豆| 欧美福利网址| 免费在线欧美黄色| 久久综合久久美利坚合众国| 欧美在线三级| 久久国产视频网|