c# - 不同 Windows PC 上的多个进程应如何同时使用存储在共享目录中的文件?

标签 c# windows concurrency file-access network-share

问题:

我在同一 LAN 中的不同 PC(操作系统:Windows XP、Windows 7)上运行同一 C# 应用程序的多个实例。我必须在他们之间共享一些配置数据。每个进程都必须具有对数据的读写访问权限。我的雇主坚持将这些共享数据存储在一个文件中,该文件位于其中一台电脑的共享目录中。

可能的解决方案:

  1. Exclusive file opening :数据存储在 TXT 文件中(也可以选择与二进制文件进行序列化)。每个进程在尝试打开文件时都使用 File.OpenFileShare.None 。获取 IOException 意味着该文件已在使用中,因此该进程必须 wait and try again later .
  2. SQL Server CE embedded DB :数据存储在SDF文件中。该引擎最多可以处理 256 个并发连接(v3.5 SP2),这已经足够了。
  3. SQLite embedded DB :数据存储在 SQLite DB 文件中。 documentation说 SQLite 可以工作,但在网络共享上使用时可能不可靠。
  4. 其他?

执行此操作的首选方法是什么?

最佳答案

不知道这是否是最好的方法,但我很久以前就用 C 语言做过这个,它对我来说效果很好。

每个进程都会读取并创建文件的个人副本,然后对其进行处理。

在固定时刻(进程终止或通过某些 UI 或任何您喜欢的方式触发时),每个进程都会将其文件副本发送到主进程,负责在共享目录中重建原始文件并向另一个进程发送信号他们需要重新加载的进程。

每个进程都会重新加载文件(包含来自所有其他进程的信息)。

当然,这个解决方案要求文件写入过程了解如何重建文件以及如何解决冲突(但这取决于数据格式)

关于c# - 不同 Windows PC 上的多个进程应如何同时使用存储在共享目录中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8957982/

相关文章:

c# - 从母版页获取列表项

.net - 如何计算计算机下载的数量?

java - ConcurrentHashMap JDK1.7 中的“scanAndLockForPut”

c# - 为什么 EvaluateJavaScriptAsync 没有被执行?

c# - 通过LiangBarsky算法裁剪线C#

c# - 从抽象类型列表中获取特定类型的所有项目

python - 在 Windows 上查找当前 wifi 网络的名称

windows - 在颠覆存储库中递归查找包含文本的文件

ruby - 在 after_commit 钩子(Hook)中缓存数据时确保一致性

java ,正确使用静态变量来防止死锁——同步