【问题标题】:simultaneous edits to xml file in C#在 C# 中同时编辑 xml 文件
【发布时间】:2011-05-14 03:53:32
【问题描述】:

我正在开发一个读取和编辑 xml 文件但使用 XDocument 类 Load() 和 Save() 方法的应用程序。如果另一个应用程序或我的应用程序的另一个实例正在运行,那么一个文档可能会覆盖另一个在内存中所做的更改 xdocument 没有持续更新(重新加载)。同时运行的程序永远不会同时编辑 xml 文件的同一部分。解决此问题的最佳方法是什么?我应该在进行每次更改之前立即进行加载还是有更优雅的方法?

【问题讨论】:

  • 您可以在编辑时锁定文件,还是使用文件的单个实例??
  • @Priya10 单实例不保证线程安全。
  • @pnya:锁定文件没有用,你需要在某个时候解锁。

标签: c# xml linq-to-xml overwrite


【解决方案1】:

最好的解决方案是不使用 XML。

使用(小型)数据库。

在多用户情况下使用任何类型的文本文件都非常困难,而且只有在您拥有固定长度和(因此)固定位置的记录(行)时,才能使用不同部分的文本文件。 XML 不提供这个。

进行编辑前加载只会减少问题出现的频率。更改总是有可能丢失,您将在文件系统级别遇到竞争条件。要使其工作,您必须使用带有锁定文件的方案。为此,您需要一个额外的文件。

【讨论】:

  • 和 sqlite 一样,有一个 ado.net 数据提供者:System.Data.Sqlite
  • @Femaref 此应用程序将部署在许多机器上。在目标机器上安装sqlite并创建数据库的过程有多难?
  • @Femaref 我的程序大小会增加多少?
  • 您也可以使用 SQL Server Express 或 Compact Edition,以获得比 SQLLite 更强大的功能。
  • @Jordan:这个(sqlite/sqlce/...)之前已经被问过了。搜索网站并发布新问题,如果找不到。
【解决方案2】:

您正在谈论能够修改文件的多个进程。如果您想保留文件而不是将该数据放入公共存储 (MS SQL),则需要实现互斥锁以确保在任何时候只有一个应用程序可以访问文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    相关资源
    最近更新 更多