有效地使用 XmlDocument.Save()

Posted

技术标签:

【中文标题】有效地使用 XmlDocument.Save()【英文标题】:Using XmlDocument.Save() Effectively 【发布时间】:2012-06-26 22:22:16 【问题描述】:

我正在使用 C# 中的 .XML 文档,在我的代码范围内,我从中选择节点、添加节点和删除节点很多次。

此文档的所有 XML 编辑都包含在一个类中,其他类调用该类。

由于数据访问类无法判断使用它的类是否完成了对文档的编辑,因此它没有关于是否/何时保存的逻辑。

可以在每次修改文档后保存,但我担心性能问题。

或者,我可以假设/希望它会被使用它的其他类保存(我创建了一个单行公共方法来保存文档,因此另一个类可以请求保存)。

第二个选项与我有关,因为我觉得我应该以某种方式在全球范围内强制执行它,以避免调用它并且不提交修改。到目前为止,永远不会出现需要回滚的情况。任何更改都是应该提交的更改。

.Net(或编码设计)是否有办法在这种情况下平衡性能和安全性?

【问题讨论】:

【参考方案1】:

如果您总是想保存更改(只是不知道何时),那么您可以将保存命令添加到类destructor。这样您就知道更改将始终被保存。

如果您需要其他帮助或想要示例,请发表评论,否则请选择正确答案。

更新:我注意到类析构函数可能会在其他对象(如 FileStream)已被释放后触发。 我建议您在析构函数中测试这种情况,并实现和使用IDisposable 接口。然后,您可以订阅 Application.Exit 事件或 Application.ApplicationExit 事件并在那里调用 dispose。 确保将代码保留在析构函数中(但确保将其放在 try 块中),以防程序崩溃或出现其他意外退出。

【讨论】:

这正是我想要的。我在谷歌上搜索了这个,但是——不知道正确的关键术语——什么也没找到,并且认为它根本不存在。这将让我在需要时保存它(调用方法),并保证它会在某个时间点保存。谢谢,并标记为正确。【参考方案2】:

基本上你的问题告诉我:你需要保存,但你不知道什么时候,因为关于保存点的知识在你的课堂之外。

我的建议是包装你的电话 - 假设你有类似 public void MyClass.SomeEditing(int foo) 的东西,创建一个类似 public void MyClass.SomeEditing(int foo, bool ShouldSave) 的包装器,并将 shouldsave 默认设置为 true

这样,您班级的消费者可以决定是否要立即保存,如果他知道,则选择false,紧随其后的其他编辑将导致保存。调用“旧”API 的现有代码受默认“立即保存”保护

【讨论】:

以上是关于有效地使用 XmlDocument.Save()的主要内容,如果未能解决你的问题,请参考以下文章

XML 配置文件 XmlDoument.Save 未更新 ConnectionString

XmlDocument 类正在删除格式、c#、.NET

.net 安全保存到 Xml 文件以防崩溃

有效地减去不同形状的numpy数组

如何在 R 中有效地使用 big.matrix 进行交叉验证?

如何使用条件有效地向量化多项式计算(屋顶线模型)