线程安全的文件读写:使用 filename/lock 字典,还是只捕获 IOExceptions?
thread-safe file reads and writes: use a filename/lock dictionary, or just catch IOExceptions?
我有一些进程定期向文件追加行,还有一些进程定期读取这些文件。这些文件并不大,追加频繁但很小。
我可以在循环延迟计数器中捕获 IOExceptions,或者我可以使用静态 ConcurrentDictionary 来防止争用发生。
捕捉异常是最直接的,但我担心最终会读到一篇不完整的文章。使用锁字典更安全还是不必要?
如果您担心阅读不完整的文章,您可以随时使用 file.Open 和 FileShare.None
/Fileshare.Read
。这与重试一起应该是安全的,但如果存在争用,可能会很慢。
创建服务可能是最简洁的解决方案。在这种情况下,我会将所有 writing/reading 委托给服务,如果可能的话缓存文件,并使用队列来写出更改。
如果服务在某处丢失消息并且未释放锁,则仅使用服务来管理锁可能很危险。
我有一些进程定期向文件追加行,还有一些进程定期读取这些文件。这些文件并不大,追加频繁但很小。
我可以在循环延迟计数器中捕获 IOExceptions,或者我可以使用静态 ConcurrentDictionary
捕捉异常是最直接的,但我担心最终会读到一篇不完整的文章。使用锁字典更安全还是不必要?
如果您担心阅读不完整的文章,您可以随时使用 file.Open 和 FileShare.None
/Fileshare.Read
。这与重试一起应该是安全的,但如果存在争用,可能会很慢。
创建服务可能是最简洁的解决方案。在这种情况下,我会将所有 writing/reading 委托给服务,如果可能的话缓存文件,并使用队列来写出更改。
如果服务在某处丢失消息并且未释放锁,则仅使用服务来管理锁可能很危险。