在 .NET 3.5 中处理非常大的 XML 文件的“推荐”方法是什么?
对于写作,我想一次生成一个元素,然后附加到一个文件中。
对于阅读,我同样想一次阅读一个元素(以与写入相同的顺序)。
我有一些想法如何使用字符串和 File.Append,但是 .NET 3.5 是否提供 XML Api 来处理任意大的 XML 文件?
不深入细节,这并不容易回答。.NET 提供了不同的方法来处理 XML 文件:
根据您所说的,XmlReader/XmlWriter 组合似乎是最好的方法。
正如 Dirk 所说,使用 XmlWriter/XmlReader 组合听起来是最好的方法。它可能非常冗长,如果您的 XML 文件相当复杂,它会变得非常笨拙。我最近不得不在一些严格的内存限制下做类似的事情。我的 SO 问题可能会派上用场。
但就个人而言,我在 MSDN 博客上发现此方法非常容易实现,并且它巧妙地处理附加到 XML 文件的末尾而没有碎片。
尝试使用 *.xml 制作 *.xsd 文件。您可以从 *.xsd 文件生成 *.cs 文件。之后将您的 *.xml 文件加载到您的对象中。它应该比整个文件占用更少的内存。
VS2010 有一个插件,可以选择从 *.xsd 生成 *.cs 文件。它被称为 XSD2Code。在该插件中,您可以选择装饰属性以进行序列化。对于名为 Settings 的 *.xsd 文件,您将获得 Settings.cs。你会做这样的事情。
StreamReader str = new StreamReader("SomeFolder\\YourFile.xml");
XmlSerializer xmlSer = new XmlSerializer(typeof(TcpPostavke));
Settings m_settings = (Settings )xmlSer .Deserialize(str);
您可以使用 Linq 查询您的对象列表。