1

私はVB.netでコンソールアプリケーションを以下に書きました。

私の意図は、1分ごとにトリガーし、いくつかのタスクを実行するアプリケーションを作成することです。だが

このアプリケーションを実行すると、CPUの50%を消費しています。

どうすれば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

ありがとうございました..

4

4 に答える 4

2

CPUが2つあると思いますか?無限のwhileループは1つのCPUの100%を消費しています。合計CPU消費量は50%になります。

コードの外観から、ループは完全に不要です。タイマークラスは、完了するとUpload()メソッドを呼び出します。

whileループを削除します...

While Not tmr Is Nothing 
End While

そして、Console.Readlineのようなものを使用して、アプリケーションが閉じないようにします。

または、ループが本当に好きな場合は、whileループ内にthread.sleep()呼び出しを貼り付けます。

于 2011-03-02T20:07:19.283 に答える
2
While Not tmr Is Nothing
End While

あなたは前の質問でこれについてすでに警告されていました。そのコードを削除します。

于 2011-03-02T20:02:16.080 に答える
2
While Not tmr Is Nothing
End While

これは単なる無限ループです。あなたは実際に何かを成し遂げることを許可していません。

これはコンソールアプリケーションであるため、おそらく1分間スリープしてから、タスクを実行するループのみが必要です。

于 2011-03-02T20:03:54.733 に答える
1

Robが言ったように、50%の負荷は、おそらくCPUコアの1つを100%使用していることを意味します。

無限ループの代わりにConsole.ReadLine()、コンソールアプリケーションの実行を維持するために使用できます。

コンソールが入力を待っている間、タイマーは意図したとおりに機能します。

于 2011-03-02T20:08:53.323 に答える