windows phone 7 - 加载一个大的xml文件

时间:2011-07-12 21:30:07

标签: xml performance windows-phone-7 loading isolatedstorage

我正在尝试将xml文件加载到我的应用程序并在ListBox上显示它。问题是xml文件大约是5 MB,手机加载大约需要40秒。当手机锁定屏幕并返回时,又需要40秒。我尝试使用isolatedstorage来存储数据,但它没有提高性能。这是我加载数据的代码:

XDocument loadedData = XDocument.Load("BigFile.xml");
            var data = from query in loadedData.Descendants("w")
                       orderby (string)query.Element("e")
                       select new myClass
                       {
                           First = (string)query.Element("a"),
                           Second = (string)query.Element("e")
                       };
        ListBox.ItemsSource = data.ToList<myClass>();

无论如何都要加快装载速度?

2 个答案:

答案 0 :(得分:4)

要提高性能,您可以执行以下操作:

  • 确保加载移出ui线程
  • 将文件分成多个较小的文件并一次加载一个文件,并在添加每个文件时更新列表。
  • 如果可能,重新格式化数据(在添加到应用程序之前),因此它只包含应用程序使用的绝对最小数据。
  • 将文件转换为其他格式(尝试JSON),可以更快地解析。
  • (如果使用7.1)将数据放入数据库并将其部署在XAP中。
  • 重新考虑是否需要拥有如此多的数据。在具有小屏幕的设备上很难浏览大/长列表。

答案 1 :(得分:0)

您可以尝试将该代码放入后台线程中,以便在主线程中继续使用其他内容时进行操作。

delcare&#34;私人BackgroundWorker backgroundWorker;&#34;在MainPage分部类

将此代码放在MainPage()构造函数(或MainPage_loaded)

// Initiaze后台工作人员显示收藏夹

        if (backgroundWorker == null)
        {
            backgroundWorker = new BackgroundWorker();
            backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
        }
        backgroundWorker.RunWorkerAsync();

然后将代码放在此处:

    void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
    {
       XDocument loadedData = XDocument.Load("BigFile.xml");
        var data = from query in loadedData.Descendants("w")
                   orderby (string)query.Element("e")
                   select new myClass
                   {
                       First = (string)query.Element("a"),
                       Second = (string)query.Element("e")
                   };
    ListBox.ItemsSource = data.ToList<myClass>();

    }

希望这可以解决问题。