在C#中处理大型xml文件的方法

时间:2011-02-16 08:42:33

标签: c#

有人可以指导我解决这个问题吗?

在我的机构中,我们处理大尺寸(最大1 GB)的xml文件,并将详细信息插入数据库表中。根据当前的设计,我们使用XmlReader解析xml文件并形成包含所需数据的xml字符串,然后将其传递到存储过程(xml数据类型)以将详细信息插入到db中。

现在问题是我们不确定除此之外是否会有更好的方法?所以请建议.Net 3.5和/或sql server 2005是否有任何新功能可以比我们的方法更好地处理这个问题。

对此reagrd的任何帮助都将受到高度赞赏。

感谢。

3 个答案:

答案 0 :(得分:1)

您是否关心XML文件中的所有内容?如果没有,您可以使用StreamReader并从XML获取文本,然后将其传递给数据库。

如果您需要验证XML是否正确,最好使用XmlReader

然而,只是将1GB的XML转储到您的数据库中似乎有点奇怪,这个XML数据的目的是什么?它有很多嵌套元素吗?也许你可以对它进行反序列化并将每个对象存储在appropriet表中,这样就可以实现更容易理解的设计。

您可以考虑使用一些方法来简化/更好地设计软件:

  • 数据库中是否同时出现多个XML文件?
  • 应用程序之间如何共享数据?
  • 您是否考虑过使用MemoryMappedFile
  • 是否可以将XML反序列化为实体并将它们存储在各个实体中?

答案 1 :(得分:0)

我怀疑如果存在任何性能问题,它将与存储过程和数据库端相关,而不是读取文件。

为什么要将XML文件存储在数据库表中?我建议使用不同的解决方案是合适的,但是如果不了解更多有关您正在尝试做什么的详细信息,则很难提出建议。

答案 2 :(得分:0)

如果xml中的每个第一级元素都是记录,即

<rootNode>
    <row>...</row>
    <row>...</row>
    <row>...</row>
</rootNode>

然后你可以创建一个IDataReader实现来读取xml(通过XmlReader)并将每个实现作为记录呈现,以便使用SqlBulkCopy导入。非常像我以前的回答here

优点:

  • SqlBulkCopy 将数据导入数据库的最快方式
  • 将其剥离为记录使得适当使用数据库,允许索引和正确输入
  • 它不依赖于以原子方式通过线路的巨大BLOB(xml数据类型所必需的)