我写了一个相当简单的控制台应用程序,每30秒检查一次Exchange邮箱。当它没有运行检查例程时,它在Main方法中的空do /循环中只是为了保持程序运行。我发现这比服务器的资源(大约50%)要多得多。
这是Main方法:
Sub Main()
GetSettings()
tmrCheckInterval.Interval = 30000
tmrCheckInterval.Start()
WriteToConsole("Scan app started")
Do
Loop
End Sub
我没有做很多控制台应用程序,所以我不确定这是否是最有效的方式,而且我已经开始使用Google搜索了。是否有一个替代流程可以让应用程序在不消耗资源的情况下运行?
谢谢...
如果你只希望每30分钟运行一次,你最好完全去掉循环,而不是setting up a Scheduled Task.
但至于为什么这个代码使用了这么多的CPU ...程序正在做的工作。它有一个永不停止的紧密循环,永远不会产生CPU。它接近50%,因为你有一个双核CPU,它使用所有的一个核心。如果你有一个四核,它将使用25%。在糟糕的旧单核时代,这将使用所有的CPU,甚至提出任务管理器来杀死应用程序可能具有挑战性。我今晚要做好噩梦,记得那些时候,谢谢你们。
我知道你似乎在这段代码中设置了一个间隔,但是这个间隔只适用于计时器,而不是循环体的一部分。你想要更像这样的东西:
Sub Main()
GetSettings()
WriteToConsole("Scan app started")
Do
'Remove the timer and call it's elapsed code directly here.
Thread.Sleep(30 * 60 * 1000)
Loop
End Sub
而且,这仍然不如仅使用计划任务那么好。