以异常安全且内存友好的方式创建XML文件?

时间:2013-08-22 15:12:25

标签: c# xml exception-safety

我想为当前项目编写一个带有XML输出的Logger / Bug-Tracker。我很抱歉,如果它应该是重复的,但提案没有用,我也没有找到一个好的谷歌解决方案。

1:我的第一个问题是关于异常安全。

如果我使用XmlDocument,则logg存储在内存中,直到我调用save。这意味着如果出现异常,我可能会失去一切。

如果我使用XmlWriter它没有存储在内存中(afaik)但我必须关闭编写器和所有元素/节点,如果异常也可能缺少。我可以关闭并重新打开编写器(指针位于文档的末尾)吗?

什么是异常安全的XML创建的最佳解决方案? (我只需要一个提示)

2:我的第二个问题是内存使用情况。

因为它是一个跟踪工具,输出可能非常巨大。因此我无法使用XmlDocument。在我看来,XmlWriter将是最好的解决方案。我对吗?

3:我的上一个[次要]问题是时间消耗。

使用XML文件进行跟踪是一个好主意还是坏主意?它减慢了我的计划多少钱?

我希望你能帮助我。

编辑:为什么我要使用XML? 稍后,我的应用程序将在“未知”环境中运行,因此有必要我可以通过Internet将日志发送到服务器,我必须验证文件(XMLSchema)。完成此操作后,我想将其转换为更好的可读(并且格式化的)HTML文件。

My HTML file

正如您所看到的,这是一个比XML更好的可视化(这仍然需要一些微调,但它是有用的)

编辑2:当前状态 我做了一些内存使用测量。 Logger(目前基于XmlDocument :()需要~600mb,用于5.000.000个条目。不是最好的结果,但也不是最差的结果。

最好的问候亚历克斯

3 个答案:

答案 0 :(得分:1)

对于跟踪文件,您需要XML的结构吗?一旦生成文件,您对该文件的计划是什么;如果纯粹用于人工处理,那么文本文件就足够了吗?这样你就可以在每次写入后刷新。 如果您想要更可查询的文件格式,是否可以使用轻量级数据库引擎?在使用MSAccess文件访问更改MDAC和64位问题之前,我曾经写过mdb文件。最近我看起来像SQLite和VistaDB。

您选择使用XML后是否有特定原因?

答案 1 :(得分:0)

因为这个问题没有一个好的答案,我必须自己回答。 我已经决定使用一个带有10k条目的环形缓冲区用于我的日志(这在实际使用中似乎是一个很好的数字)并且我已经尝试构建一个线程和异常安全logbuf(我希望它可以工作)。

最好的问候和所有答案的答案

亚历

答案 2 :(得分:-1)

为什么要推出自己的日志记录解决方案? 有非常成熟的图书馆可以做到这一点"开箱即用" AFAIK。