XDocument.Save(string filename) 是重新保存整个文件还是只是更改?
Posted
技术标签:
【中文标题】XDocument.Save(string filename) 是重新保存整个文件还是只是更改?【英文标题】:Does XDocument.Save(string filename) resave the whole file or just changes? 【发布时间】:2009-05-16 02:49:40 【问题描述】:基本上,如果我执行 Xdoc.Load(filename),进行一些更改,然后执行 Xdoc.Save(filename),它是否只保存更改的内容,例如插入或删除的元素等,还是重新保存所有内容?
根据答案,我正在考虑确定我的应用是要保存每次更改还是要在显式保存和退出时保存。还要考虑是写入多个 xml 文件还是将所有内容保存在一个大文件中。我不知道一个大文件会有多大,但我怀疑它可能有 10 多 MB,所以如果它重新保存整个文件,那么我绝对不能在保存一个大文件的同时保存所有更改。
如果它确实保存了整个文件,是否有人认为为每个实体(可能数百个)拥有一个单独的 xml 文件以及这是否是个好主意?
【问题讨论】:
【参考方案1】:它保存整个文件。这就是基于文本的格式的本质。文本文件不能在不重写未更改部分的情况下覆盖自身。
【讨论】:
还有一点;这对于可变长度编码来说是双重的,例如 UTF8(这在 xml 中很常见)——这意味着你甚至不能(稳健地)交换单个字符而不冒损坏的风险。【参考方案2】:是的,保存文档会保存整个文档。
“每次更改”保存的用例是什么?是否只是以防应用程序崩溃?如果是这样,我建议您将这些增量更改作为小文件保存在临时目录中,但是当用户明确表示要保存文件时,请将其保存在一个大文件中。 (这样更容易复制等。)在退出时删除临时目录。
我确实想知道您是否真的需要临时目录。这听起来像是做了大量工作却收效甚微。
【讨论】:
对,每次更改保存只是为了防止崩溃、断电和其他异常事件。这不是什么大问题,没有什么真正的关键任务,但可以很好地保证用户他们永远(减去损坏/删除的文件/磁盘)需要担心重新输入他们之前已经输入的数据。尽管我想知道仅在后台线程上保存是否就足够了。保存 27MB 的 for-loop 生成的 xml 花费了不到 2 秒的时间,如果它阻塞了 UI,那么如果它在后台运行可能会没问题。这超过了预期用例数据的 95%。 是的 - 请注意,当您将数据保存在后台线程中时,您需要确保不要更改 UI 中的数据。以上是关于XDocument.Save(string filename) 是重新保存整个文件还是只是更改?的主要内容,如果未能解决你的问题,请参考以下文章