繁体   English   中英

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

[英]Approach to process huge xml files in C#

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

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

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

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

谢谢。

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

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

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

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

  • 是否一次在数据库中出现多个XML文件?
  • 应用程序之间如何共享数据?
  • 你考虑过使用MemoryMappedFile吗?
  • 是否可以将XML反序列化为实体并将其存储为approprietly?

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

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

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

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

然后,您可以创建一个IDataReader实现,该实现读取xml(通过XmlReader )并将每个作为记录呈现,以使用SqlBulkCopy导入。 非常像我在这里的旧答案。

好处:

  • SqlBulkCopy数据导入数据库最快方法
  • 将其剥离到记录中可以适当地使用数据库,从而允许索引和正确键入
  • 它不依赖于以原子方式通过线路的巨大BLOB(对于xml数据类型是必需的)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM