在do循环中的vb.net控制台

问题描述 投票:0回答:1

我写了一个相当简单的控制台应用程序,每30秒检查一次Exchange邮箱。当它没有运行检查例程时,它在Main方法中的空do /循环中只是为了保持程序运行。我发现这比服务器的资源(大约50%)要多得多。

这是Main方法:

 Sub Main()
    GetSettings()
    tmrCheckInterval.Interval = 30000
    tmrCheckInterval.Start()
    WriteToConsole("Scan app started")
    Do
    Loop

End Sub

我没有做很多控制台应用程序,所以我不确定这是否是最有效的方式,而且我已经开始使用Google搜索了。是否有一个替代流程可以让应用程序在不消耗资源的情况下运行?

谢谢...

vb.net console console-application
1个回答
2
投票

如果你只希望每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

而且,这仍然不如仅使用计划任务那么好。

© www.soinside.com 2019 - 2024. All rights reserved.