Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 线程安全文件读写:使用文件名/锁字典,还是只捕获IOExceptions?_C#_Multithreading_File_Concurrency_Ioexception - Fatal编程技术网

C# 线程安全文件读写:使用文件名/锁字典,还是只捕获IOExceptions?

C# 线程安全文件读写:使用文件名/锁字典,还是只捕获IOExceptions?,c#,multithreading,file,concurrency,ioexception,C#,Multithreading,File,Concurrency,Ioexception,我有几个进程定期向文件追加行,还有几个进程定期读取这些文件。这些文件不是很大,而且附件很频繁,但很小 我可以在循环延迟计数器中捕获IOExceptions,也可以使用静态ConcurrentDictionary来防止冲突的发生 捕捉异常是最困难的,但我担心最终会读到一篇不完整的文章。使用锁字典更安全还是不必要?如果您担心读不完整的写操作,您可以随时使用FileShare.None/FileShare.Read。这与重试应该是安全的,但如果存在争用,可能会很慢 创建服务可能是最简单的解决方案。在这

我有几个进程定期向文件追加行,还有几个进程定期读取这些文件。这些文件不是很大,而且附件很频繁,但很小

我可以在循环延迟计数器中捕获IOExceptions,也可以使用静态ConcurrentDictionary来防止冲突的发生


捕捉异常是最困难的,但我担心最终会读到一篇不完整的文章。使用锁字典更安全还是不必要?

如果您担心读不完整的写操作,您可以随时使用
FileShare.None
/
FileShare.Read
。这与重试应该是安全的,但如果存在争用,可能会很慢

创建服务可能是最简单的解决方案。在这种情况下,我会将所有的写/读操作委托给服务,如果可能,缓存文件,并使用队列写出更改


如果服务在某个地方丢失了一条消息,并且锁没有被释放,那么仅使用服务来管理锁可能是危险的。

如果您担心读取不完整的写操作,则始终可以使用
文件共享。无
/
文件共享。读取
。这与重试应该是安全的,但如果存在争用,可能会很慢

创建服务可能是最简单的解决方案。在这种情况下,我会将所有的写/读操作委托给服务,如果可能,缓存文件,并使用队列写出更改


如果服务在某个地方丢失了一条消息,并且没有释放锁,那么仅使用服务来管理锁可能是危险的。

如果您只是让它正常工作,为什么还要对它进行黑客攻击?ConcurrentDictionary无法跨进程执行此操作,请使用命名互斥来仲裁访问。我正在考虑使用一个服务层,该层位于文件系统和访问文件系统的人之间,这将允许字典工作-我没有提到编写器和读取器可以在不同的机器上。命名互斥体确实不需要字典,但不清楚如何直接允许使用它进行多次读取。也许我不需要支持。既然你能让它正常工作,为什么还要破解它呢?ConcurrentDictionary无法跨进程执行此操作,请使用命名互斥来仲裁访问。我正在考虑使用一个服务层,该层位于文件系统和访问文件系统的人之间,这将允许字典工作-我没有提到编写器和读取器可以在不同的机器上。命名互斥体确实不需要字典,但不清楚如何直接允许使用它进行多次读取。也许我不需要支持这一点。