У меня есть приложение на телефоне, и оно занимает около 50 страниц XML, в каждом XML содержится около 100 узлов.Так что, если вы делаете математику, которая составляет около 5000 узлов, я разбираю.Иногда эти узлы не установлены одинаково.Пример: возможно, 75% имеют схему, отличную от других 25%, поэтому есть код для обработки этого и анализа их по-разному.
Я не могу оптимизировать вызовы http больше, чем у меня, как только для веб-службобрабатывать данные по 100 «элементов» за раз, поэтому мне приходится в основном обращаться к веб-службе 50 раз, чтобы получить все страницы данных.Вот процесс высокого уровня.
Call web service (webclient)
Parse XML (take note total pages in xml. it will say Page 1 of 100)
Add results to collection
Call web service again for page 2
Parse
Add results to collection
....rinse and repeat 100 times.
Код синтаксического анализа - действительно единственное место, которое я могу оптимизировать.Все, что я делаю, это использую 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;
}