我正在创建一个Windows Phone应用程序,我需要实现一个相当大的数据库(由288,000个项目组成),但每当我尝试运行它时,程序都会给我一个System.Xml.XmlException
。
问题在于,如果我只在XML数据库中放置100个或更少的项目,它可以工作,并允许我查询它。
你知道为什么会这样吗?
以下是代码:
loadCustomData = XDocument.Load("vocabolario.xml");
var domanda = from c in loadCustomData.Descendants("Parola")
where c.Attribute("id").Value == "1"
select c.Attribute("Contenuto").Value;
lol.Text = domanda.First();
答案 0 :(得分:1)
来自Jon Skeet的文章。
如果您乐意将所有内容都读入内存,请使用XDocument。它会让你的生活更轻松。 LINQ to XML是一个可爱的API。
如果您需要以流式方式处理大型XML文件,请使用XmlReader(例如XmlTextReader)。这是一个更痛苦的API,但它允许流式传输(即只根据需要处理数据,因此您可以浏览一个巨大的文档,一次只有少量的内存)。
然而,有一种混合方法 - 如果你有一个由小元素组成的庞大文档,你可以从位于元素开头的XmlReader创建一个XElement,使用LINQ to XML处理元素,然后移动将XmlReader放到下一个元素上并重新开始。
Check the Example below
// Create a DOM document with some content.
XmlDocument doc = new XmlDocument();
XmlElement child = doc.CreateElement("Child");
child.InnerText = "child contents";
XmlElement root = doc.CreateElement("Root");
root.AppendChild(child);
doc.AppendChild(root);
// Create a reader and move to the content.
using (XmlNodeReader nodeReader = new XmlNodeReader(doc)) {
// the reader must be in the Interactive state in order to
// Create a LINQ to XML tree from it.
nodeReader.MoveToContent();
XElement xRoot = XElement.Load(nodeReader);
Console.WriteLine(xRoot);
}
这只是一个尝试类似的例子。