代码之家  ›  专栏  ›  技术社区  ›  friism

使用LINQ to XML和LINQ to SQL生成非常大的XML文件

  •  3
  • friism  · 技术社区  · 15 年前

    我正在尝试对一个非常大的数据库(许多千兆字节)的XML进行转储。我使用linq-to-sql从数据库中获取数据,使用linq-to-xml生成XML。我在用 XStreamingElement 要保持低内存,请使用低内存。但是,在没有编写任何XML的情况下,作业仍然会分配所有可用的内存。结构如下:

    var foo =
        new XStreamingElement("contracts",
           <LinqtoSQL which fetches data>.Select(d =>
        new XElement("contract",
            ... generate attributes etc...
    using (StreamWriter sw = new StreamWriter("contracts.xml"))
    {
        using (XmlWriter xw = XmlWriter.Create(sw))
        {
            foo.WriteTo(xw);
        }
    }
    

    我还尝试用以下方法进行保存:

    foo.Save("contracts.xml", SaveOptions.DisableFormatting);
    

    ……毫无用处。

    有什么线索吗?

    3 回复  |  直到 11 年前
        1
  •  1
  •   Marc Gravell    15 年前

    数据有多复杂?我不太熟悉 XStreamingElement 但是我想知道你是否可以用 XmlWriter 直接?特别是对于循环中的类似数据,可以非常容易地使用它。

    但是,我会考虑将XML作为此数据的选择。这是要求吗?或者只是一种方便的可用格式?尤其是,很难 解析 XML的大小很方便,因为您必须使用 XmlReader (这比 XMLX )

    如果你 可以 使用其他格式,我建议…我想了一下,但除非你说你会感兴趣,否则我不会喋喋不休的。

        2
  •  0
  •   Tim Cooper    13 年前

    当然,你只需要一条线索:不要这样做。-)

    XML格式不适合数据库转储,因为它不能很好地处理大量数据。

    所有数据库都有某种“转储”实用程序,可以将其数据以一种格式导出,然后将其读取到另一个数据库中,这将是一种可行的方法。

        3
  •  0
  •   friism    11 年前

    是的,通过将我的数据分为10000个项目的集合,并将它们写入单独的XML文件,“解决”了这个问题。将考虑其他数据交换格式并购买更大的服务器。

    如果有人知道如何适当地利用 XStreamingElement .