2016-03-08 72 views
1

我處於需要每秒執行一次操作的次數(刷新圖片框或從套接字緩衝區中拉出字節)的情況。我想知道是否有合適的方法來做到這一點。我做了一些研究,並且發現了一些關於這方面的方法。什麼是測量時間最有效的方法?

  1. 我可以在一段時間循環工作,不斷地問OS是什麼時候檢查的時間X ammount的已經過去了。(DateTime.UtcNow)

  2. 我可以在一段時間循環工作,讓它睡覺一段時間。

  3. 我可以在while循環中工作並使用Clock類來檢查已用時間。

  4. 使用Timer類引發事件。

這些都是我知道的使週期性發生的所有方法。第二種方法不是很精確,但爲了完成起見,我把它放在這裏。我應該知道其他方法嗎?哪一個開銷最少?

我在2015年的VisualStudio C#和.NET的4.6.1版本

工作
+1

那麼'定時器'是一個很好的'定時器',是什麼讓你認爲這將是低效率/使用問題? –

+0

我不是說這是壞的我只是問最好的方法是什麼。我將每秒鐘使用這種方法的次數可能達到幾百次,而且我希望儘可能少花時間檢查幾點。 – Jahith

回答

1

使用秒錶,相比DateTime.Now它採用高精度定時器

DateTime.Now好約毫秒精確度秒錶,微秒。

// Create new stopwatch. 
Stopwatch stopwatch = new Stopwatch(); 

// Begin timing. 
stopwatch.Start(); 

// Do something. 
for (int i = 0; i < 1000; i++) 
{ 
    Thread.Sleep(1); 
} 

// Stop timing. 
stopwatch.Stop(); 

// Write result. 
Console.WriteLine("Time elapsed: {0}", stopwatch.Elapsed); 
+0

抱歉等待。我正在檢查您的解決方案,以及它適合我的問題。秒錶班級並不像一個合適的線路,因爲我無法真正找到一種很好的方式來使用它來以一種方式調用一個方法。例如,實現秒錶的最簡單方法是每隔一段時間檢查一次,如果stopwatch.Elapsed大於X,並且它是做某事然後重置秒錶。這個解決方案意味着一些等待期,我無法保證它會在很長一段時間內保持一致。 – Jahith

0

秒錶是專門爲此目的而設計的,它是測量.NET中時間執行的最佳方法之一。

var watch = System.Diagnostics.Stopwatch.StartNew(); 
/* the code that you want to measure comes here */ 
watch.Stop(); 
var elapsedMs = watch.ElapsedMilliseconds; 

Console.WriteLine(elapsedMs); 

不要使用DateTimes來測量.NET中的時間執行。

相關問題