C#高精度計(jì)時(shí)
2011-04-01 11:12:52| 分類:
C#.Net
| 標(biāo)簽:timer
|字號(hào) 訂閱
在C#中簡(jiǎn)單的計(jì)時(shí)可以使用DateTime類,,該類提供的方法可以得到精確到秒的數(shù)據(jù),,不過(guò)想要再得到更精確時(shí)間就無(wú)能為力了。但是并不表示C#就沒(méi)辦法,,其實(shí)實(shí)現(xiàn)起來(lái)也很簡(jiǎn)單,。 第一種方法是使用System.Diagnostics命名空間下的Stopwatch 類,該類是.NET Framework 2.0中新增的,,它提供一組方法和屬性,,可用于準(zhǔn)確地測(cè)量運(yùn)行時(shí)間,使用起來(lái)很簡(jiǎn)單,,無(wú)非是實(shí)例化對(duì)象,,調(diào)用方法和屬性。 System.Diagnostics.Stopwatch MyWatch = new System.Diagnostics.Stopwatch(); MyWatch.Start(); for (int i = 0; i < Int16.MaxValue; i++) { string st = string.Format("%d", i); } MyWatch.Stop(); Console.WriteLine(MyWatch.ElapsedMilliseconds.ToString()); | 另外一種方法是自己編寫(xiě)一個(gè)類,,如下: class HPTimer { //引用系統(tǒng)API [DllImport("Kernel32.dll")] private static extern bool QueryPerformanceCounter(out long lpPerformanceCount); [DllImport("Kernel32.dll")] private static extern bool QueryPerformanceFrequency(out long lpFrequency); private static long StartTime, StopTime; private static long Frequence; public HPTimer() { StartTime = 0; StopTime = 0; if (QueryPerformanceFrequency(out Frequence) == false) throw new Win32Exception(); } public void Start() { QueryPerformanceCounter(out StartTime); } public void Stop() { QueryPerformanceCounter(out StopTime); } public double Duration { get{return 1000*(double)(StopTime - StartTime) /(double)Frequence;} } } | 同樣通過(guò)調(diào)用該類也可以實(shí)現(xiàn),,測(cè)試表示后一種方法比較好,,因?yàn)槿绻蛔?毫秒的話,前者返回0
|