.net – 在SyncLock块中放置频繁的文件IO *** 作是不是一个坏主意?

.net – 在SyncLock块中放置频繁的文件IO *** 作是不是一个坏主意?,第1张

概述说我有一些代码可以做到这一点: 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 Stati 说我有一些代码可以做到这一点:

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 successEnd Function

首先:我在SyncLock中有Try / Catch / Finally块是一个问题吗?

第二个:假设这个代码在一个事件上运行,可能在很短的时间内运行很多次 – 比如说,在一秒钟内运行十次.让它像这样的SyncLock是否可以,或者让它在队列中添加一行更有意义,然后将所有行从队列写入到计时器上的文件,例如,每秒一次?

解决方法 乍一看,这看起来还不错,有两点需要注意:

>静态成员已在幕后使用一种线程安全锁定.因此,您可能只需要在现有锁上捎带,而不是显式锁定.不过,我不确定那会是什么样子.
>不要返回状态代码.让异常传播到适当的级别.完成后,您可以像这样重写代码:

.

Public Sub AppendTologfile(ByVal s As String) As Boolean    Static LogfileLock As New Object()    SyncLock LogfileLock        Using sw As New IO.StreamWriter(LogfilePath)            sw.Writeline(s)        End Using    End SyncLockEnd Sub

这只是不到一半代码的所有功能.唯一的区别是你必须在调用代码中处理异常而不是检查返回状态.

总结

以上是内存溢出为你收集整理的.net – 在SyncLock块中放置频繁的文件I / O *** 作是不是一个坏主意?全部内容,希望文章能够帮你解决.net – 在SyncLock块中放置频繁的文件I / O *** 作是不是一个坏主意?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1229449.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存