【问题标题】:Create a XML-File in an exception safe and memory friendly way?以异常安全和内存友好的方式创建 XML 文件?
【发布时间】:2013-08-22 15:12:25
【问题描述】:

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

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

如果我使用 XmlDocument,则日志将存储在内存中,直到我调用 save。这意味着如果发生异常,我可能会失去一切。

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

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

2:我的第二个问题是关于内存使用的。

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

3:我的最后一个 [小] 问题是关于时间消耗的。

使用 XML 文件进行跟踪是好主意还是坏主意?它会使我的程序减慢多少?

我希望你能帮助我。

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

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

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

最好的问候亚历克斯

【问题讨论】:

  • 添加了内存测量。

标签: c# xml exception-safety


【解决方案1】:

对于跟踪文件,您需要 XML 的结构吗?文件制作完成后,您有什么计划;如果它纯粹用于人工处理,那么文本文件就足够了吗?这样你就可以在每次写入后刷新。 如果你想要一个更可查询的文件格式,你能合并一个轻型数据库引擎吗?在更改 MDAC 和 MSAccess 文件访问的 64 位问题之前,我曾经写入一个 mdb 文件。最近我在研究 SQLite 和 VistaDB。

您选择 XML 有什么特别的原因吗?

【讨论】:

  • 我已经为我的问题添加了解释
【解决方案2】:

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

向所有答案致以最诚挚的问候和感谢

亚历克斯

【讨论】:

    【解决方案3】:

    为什么要推出自己的日志记录解决方案? 有非常成熟的库可以“开箱即用”afaik。

    【讨论】:

    • 我没有找到适合我的问题的解决方案。我发现的大多数框架都是商业的或者不能写入 xml。如果你能说出一个能做我想做的事情的好人,那就太好了;)
    • 我个人用的是Nlog,至少可以输出一些XML:stackoverflow.com/questions/3460266/…但是Log4net可以输出更灵活的XML,但是我没用过,所以只能指点一篇文章:stackoverflow.com/questions/1147103/log4net-xml-output
    • 我错了还是它们不是为 xml 输出而设计的?它们都可以用 xml 配置,但我看不到如何输出到 xml。尽管如此,我不想使用框架(仅当它“完美”满足我的需求时)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多