私のコードでは、プロセスを実行し、標準エラー出力 (数値) の一部を取得して、進行状況の数値を送信するイベントを発生させます。
「.First」メソッドのこの行で例外が発生することがあります。これは、文字列に分割するものがないためです。
out = mp3gain_For_NonTag.StandardError.ReadLine.Trim.Split("%").First
問題は、Try/Catch を実行せずにその例外を回避するために必要なチェックを追加することです。速度テストで、この手順での try/catch がパフォーマンスを大幅に低下させることに気付いたからです。
必要なチェックを実行するコードを単純化したいが、例外をキャッチする必要はありません (追加したチェックは、try/catch よりも迅速に実行されます)。
コードは次のとおりです。
Private Shared Sub Run_MP3Gain_NotTag()
mp3gain_For_NonTag.Start() ' Run process
Dim out as string = mp3gain_For_NonTag.StandardError.ReadToEnd
While Not mp3gain_For_NonTag.HasExited
If Not String.IsNullOrEmpty(out) Then
' This would generate numbers between 1 to 100
out = mp3gain_For_NonTag.StandardError.ReadLine.Trim.Split("%").First
End If
If Integer.TryParse(out, 0) Then
RaiseEvent MP3Gain_Progress(out)
End If
End While
RaiseEvent MP3Gain_Exited()
End Sub
...追加情報として、これは私がやりたくないことのサンプルです。例外の種類をキャッチしなくても、この変更されたコード コードのように try キャッチを追加すると、パフォーマンスが大幅に低下すると言えます。
Private Shared Sub Run_MP3Gain_NotTag()
mp3gain_For_NonTag.Start() ' Run process
Dim out as string = mp3gain_For_NonTag.StandardError.ReadToEnd
While Not mp3gain_For_NonTag.HasExited
Try
out = mp3gain_For_NonTag.StandardError.ReadLine.Trim.Split("%").First
RaiseEvent MP3Gain_Progress(out)
Catch : End Try
End While
RaiseEvent MP3Gain_Exited()
End Sub