我在VB.net中编写了以下控制台应用程序。
我的目的是编写一个每分钟触发一次并执行某项任务的应用程序。但
当我运行此应用程序时,它消耗了50%的CPU。
如何让它消耗更少的CPU?
我是否在正确的位置调用计时器(在主方法中)?
稍后我想使用相同的任务创建一个Windows服务并安装在服务器上。
如何让应用程序消耗更少的CPU?
Module Module1
Dim inputPath As String = "C:\Input"
Dim outputPath As String = "C:\Output"
Dim folder As Directory
Sub Main()
Dim tmr As Timer = New Timer(New TimerCallback(AddressOf Upload), Nothing, 1000, 60000)
While Not tmr Is Nothing
End While
End Sub
Public Sub Upload(ByVal o As Object)
Dim sr As StreamReader
Dim conStr1 As String = "Data Source=TNS Name;User ID=xx; Password=xx;"
'Look up for pending requests in RQST_TBL
Dim cnn1 As New OracleConnection(conStr1)
Dim datReader As OracleDataReader
Dim cmd1 As New OracleCommand
cnn1.Open()
.....
.....
End Sub
End Module
谢谢..
答案 0 :(得分:2)
While Not tmr Is Nothing
End While
在之前的一个问题中,您已经被警告过了。删除该代码。
答案 1 :(得分:2)
While Not tmr Is Nothing
End While
这只是一个无限循环。你实际上并没有完成任何事情。
由于这是一个控制台应用程序,您可能只需要一个休眠一分钟的循环,然后执行您的任务。
答案 2 :(得分:2)
我猜你有两个CPU?无限while循环占用一个CPU的100%;让你的CPU总消耗量为50%。
从代码的外观来看 - 完全不需要循环。您的计时器类将在完成后调用Upload()方法。
删除while循环...
While Not tmr Is Nothing
End While
使用类似Console.Readline的东西来阻止应用程序关闭。
如果你真的喜欢循环,或者在while循环中粘贴一个thread.sleep()调用。
答案 3 :(得分:1)
正如Rob所说,50%的负载可能意味着你正在使用100%的CPU内核。
您可以使用Console.ReadLine()
来保持控制台应用程序的运行,而不是无限循环。
当控制台正在等待输入时,您的计时器仍将按预期运行。