使用System.Threading使用50%CPU的简单.exe

时间:2011-03-17 12:44:46

标签: c# .net desktop-application

我有一个非常简单的可执行文件,每隔3秒检查一个特定的文件夹,看看是否有文件。如果它找到一个文件,它会做一些事情,然后每隔3秒返回一次检查文件夹。

有人报告说这个可执行文件有时占用了50%的CPU,有没有关于如何正确执行此操作的建议。下面是我如何做这个的示例代码。

// Check our folder every x seconds
Timer = new System.Threading.Timer(TimerCallback, null, 0, Global.SecondsToCheckPrintFolder * 1000);

2 个答案:

答案 0 :(得分:9)

您应该使用FileSystemWatcher

要回答你的问题,你的主线程可能正在运行while(true) { },这将永远杀死CPU。

要使主线程永远等待,您应该致电Application.Run() 您也可以拨打Thread.Sleep(-1)

答案 1 :(得分:1)

这在线程池内执行,这意味着可以多次同时执行回调。为什么不使用简单的循环呢?

while(true)
{
    if (File.Exists(@"someFile"))
    {
         // Do stuff
    }
    Thread.Sleep(3000);
}