2009-08-28 4 views
5

.NET 클래스 구조 (고정 길이 레코드 형식에 매핑되고 MQ를 통해 전송되는)로 파싱해야하는 상당히 큰 XML 파일이 있습니다. 성과는 중요하지만 절대적으로 중요하지는 않습니다.실제로 XPathNavigator와 XmlReader의 속도 차이는 얼마나 큽니까?

XML 파일을 읽기 위해 거의 항상 XPathNavigator을 사용합니다. XmlReader보다 훨씬 쉽습니다. 반면에 이론적으로는 단지 한 번에 하나의 노드 만 읽으므로 XPathNavigator은 XPath, 아마도 전체 문서를 실행할만큼 충분히 읽어야하기 때문에 은 XPathNavigator보다 빠릅니다.

내 질문은 : 얼마나 더 빠릅니까? 수천 개의 노드를 읽을 때 눈에 띄는 차이가 있습니까? 내가 대체로 XmlReader으로 전환해야하는 전환점은 무엇입니까? 또는 XPathNavigator은 언제나 좋은 선택이 될 수 있도록 최적화되어 있습니까?

대부분의 XML 경험은 상대적으로 작은 파일이므로 큰 파일로 작업 한 사람의 의견을 찾고 있습니다.

답변

5

XPathNavigator의 구현을 얻을 수있는 유일한 곳은 .Xml.Linq.XDocument 또는 XPathDocument 중 하나이며 전체 트리는 메모리에 보관됩니다.

반면에 XmlReader는 노드 집합을 트리로 수집 할 필요없이 XML 스트림을 검색하고 구문 분석 할 수 있습니다.

따라서 용량이 큰 데이터를 한 후, 앞으로에만 방식으로 모든 필요한 데이터를 수집 가정은 XmlReader를 밖으로 단순히 기초하여 XPathNavigator를 수행해야 설정이 : -

    당신의 스트림을 deserialise했을 것이다
  1. 어쨌든 XML을 사용하여 문서를 채울 수 있습니다.
  2. 큰 항목 집합을 메모리에로드 할 필요가 없습니다.