【发布时间】:2012-12-27 15:21:07
【问题描述】:
我正在用 C# 编写一个控制台应用程序,我的代码是这样的:
while(true)
{
//do some stuff
System.Threading.Thread.Sleep(60000)
}
我注意到我的应用程序在“睡眠”时的内存使用量约为 14k。 但后来我引用了 System.Windows.Forms 并改用了计时器,我注意到内存使用量大幅下降。
我的问题是,在不使用那么多内存的情况下,每隔几秒执行一次的正确方法是什么?
【问题讨论】:
-
请不要将
Thread.Sleep()用于计时目的。它不准确。 -
Here 是关于 Thread.Sleep 的有趣文章,补充一下 vanneto 所说的,与计时器相比,将 Thread.Sleep 与 while(true) 循环结合使用也会导致 CPU 使用率较高
-
FWIW
Thread.Sleep与 BCL 中的任何计时器相比实际上都非常准确。我的测试表明Sleep精确到 ~1ms,标准差为 0.08ms。另一方面,System.Threading.Timer仅精确到 ~14ms,stddev 为 0.6ms。里程会有所不同。 -
另外,
Sleep不会导致 CPU 过高。事实上,在我的机器上,超时为 1 或更高,在紧密循环中调用Sleep将产生约 0% 的 CPU 使用率。Sleep(0)当然会消耗约 100% 的 CPU 使用率。这是有原因的,因为Sleep(0)和Sleep(1)具有特殊含义。
标签: c# .net multithreading timer