2016-03-08 41 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中的时间执行。

相关问题