저는 전화로 애플리케이션을 가지고 있으며 약 50 페이지의 XML을 취하는데 각 XML에는 약 100 개의 고개가 있습니다. 그래서 당신이 약 5000 개의 노드 인 수학을한다면 파싱 할 것입니다. 때때로 이러한 노드가 동일하게 설정되지 않습니다. 예 : 어쩌면 75 %가 다른 25 %와 다른 스키마를 가지고 있으므로이를 처리하고 다르게 파싱하는 코드가 있습니다.WP7의 XML 성능 최적화를위한 팁
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;
}
맨 위에는 두 가지 질문이 있습니다. (1) 이것은 호출 될 때마다 다른 서비스에서 가져 오는 XML이거나 아무것도 변경되지 않는 시간입니다. (2) 서비스의 행동? –
코드 샘플을 분석하면 도움이됩니다. –
집에 도착했을 때 질문에 답할 때 몇 가지 코드를 추가하겠습니다. 나는 그 서비스에 대한 통제권이 없다. 나는 페이징 된 버전보다 거대한 단일 XML을 선호한다. API가 페이징 웹 페이지가 아닌 뚱뚱한 클라이언트 용으로 설계되었다는 느낌이 들었습니다. 둘째, 모든 페이지에서 결과가 다릅니다. – firebellys