4

これを行うコードがあるとします:

Public Function AppendToLogFile(ByVal s As String) As Boolean
    Dim success As Boolean = True
    Dim fs As IO.FileStream = Nothing
    Dim sw As IO.StreamWriter = Nothing

    Static LogFileLock As New Object()
    SyncLock LogFileLock
        Try
            fs = New IO.FileStream(LogFilePath)
            sw = New IO.StreamWriter(fs)
            sw.WriteLine(s)

        Catch ex As Exception
            success = False

        Finally
            If Not sw Is Nothing Then sw.Close()
            If Not fs Is Nothing Then fs.Close()
        End Try
    End SyncLock

    Return success
End Function

まず第一に、SyncLock 内に Try/Catch/Finally ブロックがあるのは問題ですか?

2 番目に、このコードがイベントで、短い時間枠内で何度も実行される可能性があるとします。たとえば、1 秒間に 10 回実行されます。このように SyncLock を使用しても問題ありませんか、それとも Queue に行を追加してから、たとえば 1 秒ごとにオフになるタイマーで Queue からすべての行をファイルに書き込む方が理にかなっていますか?

4

2 に答える 2