0

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();
4

1 に答える 1

1

ジョン・スキートの記事より。

すべてをメモリに読み込める場合は、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);
}

これは単なる例です。同様のことを試してください。

于 2013-10-04T10:43:01.390 に答える