성능이나, 장단점은 뭐가 있을까요?..
XmlTextReader 는 예전의 SAX 처럼 단방향 읽기를 지원하는 것이고.
XPathDocument 는 XSLT 처리및 XPath 를 지원하니까...
서로 완전히 다른 클래스라고 볼 수 있습니다. 그러니, 서로에 대해서 비교할 수
있는 성능도 모호하고 장단점 역시 모호하죠. ^^
--
======= (c) .NETXpert ==========
url : http://www.dotnetxpert.com
eml : ke...@dotnetxpert.com
msn: kevi...@magicn.com
MCSD.NET, MVP[VC++]
==============================
"INSIDEAPPLE™" <he...@serverinfo.pe.kr.korea> wrote in message
news:eByrJ3Nu...@TK2MSFTNGP12.phx.gbl...
질문을 올린 이유는 두개의 클래스가 각기 다른 기능이지만,
내부 코어에서는 xml파일을 어차피 텍스트스트림 형태로 읽는거 아닌가 싶어서요.
textreader는 xml파일을 텍스트로 인식하고 검색코자 하는 문자열을 통해서
노드위치를 파악하는거고, xpath도 마찬가지로 순차적으로 텍스트를 읽지만
검색시 특정 노드외에는 하위 노드까지 읽지 않는다는게 차이점이 아닌가 해서.
두개의 성능이나 장단점을 여쭤본거예여~..^^;
제가 이해하고 있는게 틀린건지여? ^^; 한수 부탁드립니다...
"정성태" <kev...@hanmail.net.korea> wrote in message
news:OKYJEYiu...@tk2msftngp13.phx.gbl...
따라서, XPathDocument 로 Select 를 하게 되면 전체 문서 구조를 알고 있기
때문에 Random 액세스가 가능하지만,
XmlTextReader 는 처음부터 읽어나가면서 하나씩 파싱을 하기 때문에 순차
액세스만 가능하죠.
일례로, XPathDocument 는 XML 문서구조가 invalid 인 경우, Load 시에 예외를
반환하지만, XmlTextReader 는 그것도 모른 체로 계속 XML Node 를 읽어나가다가
노드 구조가 잘못된 지점에 와서야 예외를 반환하게 됩니다.
아마도 XPathDocument 는 내부적으로 해당 XML 문서에 대한 구조를 유지시켜 놓을
것입니다. 그래서 그런지는 몰라도, XmlTextReader 로
XmlTextReader xmlText = new XmlTextReader(
@"D:\temp\CSConsole\name.xml" );
로드 하는 것과 XPathDocument 로
XPathDocument xDoc = new XPathDocument(
@"D:\temp\CSConsole\name.xml" );
로드하는 2가지 방식간의 메모리 변화는 현저하게 차이가 납니다.
그것도 장단점에 포함될 수 있겠지요. XmlTextReader 는 메모리를 적게 쓴다는
것과 XPathDocument 는 다소 무거울 수 있다는 점.
그런 점을 고려해서 검색에 대한 성능상의 장단점을 살펴보면.
일단 로딩 후에는 2가지 검색 속도비교에서 오히려 XPathDocument 가 빠르다는
것입니다. 하지만, 로딩 시간을 고려하면 일반적인 상황에서 XmlTextReader 가
빠르고요. 그러니 만약... 하나의 Xml 문서에 대해서 여러번 검색을 한다면
메모리/로딩 시간과 XPath 수식사용 가능성을 저울질하며 XPathDocument 를
선택할 수 있겠지요.
음... 한가지 ... 다소 쉬운 예를 들어볼까요?
하나의 대용량 Xml 문서가 있는 경우. Winform App 에서는 해당 문서를
XPathDocument 로 사용하는 것이 좋을 것입니다. 반면에 Webform 구조에서는.
aspx 로 들어오는 모든 요청에 대해서 해당 대용량 파일을 무거운 XPathDocument
로 사용하는 것보다는 경량 XmlTextReader 로 처리하는 것이 옳은 선택일 수 있을
것입니다. 물론, Cache 등에 XPathDocument 를 저장해 놓고 사용하는 우회적인
방법을 통한다면 XPathDocument 로도 좋겠고요. 더 생각해 봐서, Web Farm 에서의
구조를 생각한다면 Cache 로 인해서 문서구조 변경에 대한 동기화를 할 수 없는
경우에 XPathDocument 를 cache 에 저장해 놓으면 안될 것입니다. XmlTextReader
가 더 나은 방법이겠지요. 물론,,, 더 생각해 봐서... ^^; Cache 에 대한
동기화옵션을 제공한다면... 다시 XPathDocument 가 더 나은 방법일 것입니다.
^^; 답변이 꽤 길어졌네요.
--
======= (c) .NETXpert ==========
url : http://www.dotnetxpert.com
eml : ke...@dotnetxpert.com
msn: kevi...@magicn.com
MCSD.NET, MVP[VC++]
==============================
"INSIDEAPPLE™" <he...@serverinfo.pe.kr.korea> wrote in message
news:OaOHyFmu...@TK2MSFTNGP14.phx.gbl...
"정성태" <kev...@hanmail.net.korea> wrote in message
news:ew#U#vjvEH...@TK2MSFTNGP09.phx.gbl...