WP7上的XML性能优化提示

本文关键字:优化 提示 性能 XML 上的 WP7 | 更新日期: 2023-09-27 18:22:29

我在手机上有一个应用程序,它需要大约50页的XML,每个XML中大约有100个节点。因此,如果你计算大约5000个节点,我正在解析。有时这些节点的设置不相同。示例:可能75%的人与其他25%的人有不同的架构,所以有代码可以处理这一问题并以不同的方式解析它们。

我再也无法优化http调用了,因为web服务一次只提供100个"项目"的数据,所以我基本上必须点击web服务50次才能获得所有页面的数据。以下是高级流程。

调用web服务(web客户端)解析XML(注意XML中的总页数。它将显示第1页,共100页)将结果添加到集合再次呼叫网页2的web服务作语法分析将结果添加到集合…冲洗并重复100次

解析代码实际上是我唯一可以优化的地方。我所做的就是使用linq来解析XML,并在IEnumerable中分离出节点,然后解析它们,并将它们放置在我创建的自定义对象中。我正在寻找一些关于如何优化整个过程的高水平想法。也许我错过了什么。

一些代码。。。。想象一下下面的情况,就像1000次或更多,并且有更多的属性,这是一个小例子。大多数都有大约30个需要解析的属性。。此外,我无法访问真正的模式,也无法控制模式更改。

XElement eventData = XElement.Parse(e.Result);
IEnumerable<XElement> feed =
    (eventData.Element("results").Elements("event").Select(el => el)).Distinct();
foreach (XElement el in feed)
{
    _brokenItem = el.ToString();
    thisFeeditem.InternalGuid = Guid.NewGuid().ToString();
    thisFeeditem.ServiceIcon = GetServiceIcon(thisFeeditem.ServiceType);
    thisFeeditem.Description = el.Attribute("displayName").Value;
    thisFeeditem.EventURL = el.Attribute("uri").Value;
    thisFeeditem.Guid = el.Attribute("id").Value;
    thisFeeditem.Latitude = el.Element("venue").Attribute("lat").Value;
    thisFeeditem.Longitude = el.Element("venue").Attribute("lng").Value;
}

WP7上的XML性能优化提示

在没有看到代码的情况下,优化它并不容易。然而,有一点你应该考虑:

Linq-to-XML是一个基于DOM的解析器,它将整个XML文档读取到内存中的模型中。所有查询都是针对DOM执行的。对于大型文档,构造DOM可能需要占用大量内存和CPU。此外,如果编写效率低下,您的Linq-to-XML查询可能会多次导航同一个树节点。

作为一种替代方案,可以考虑使用像XmlReader这样的串行解析器。这种类型的解析器不会为文档创建基于内存的模型,而是以仅向前的方式进行操作,迫使您只读取每个元素一次。

您可以更改体系结构。

创建一个web服务来收集和过滤XML数据,并在电话上从该web服务中检索数据。

通过这种方式,您可以将繁重的处理转移到(可扩展?!)服务器上,并且只需在XML源发生更改时修改服务,而不必更新所有客户端。

您还可以缓存结果并防止重复。

现在你可以完全控制电话里发生的事情了。