2011-12-24 6 views
11

8 메가 파일이 있습니다. JAXB를 사용하는 마샬링에는 1082ms가 걸리고 DOM을 사용하면 862ms가 소요되며 SAX를 사용하면 438ms가 소요됩니다. JDK 1.6에서 모든 기본값을 사용하고 있습니다. woodstox를 사용하는 것과 같은 추가 구성은 사용되지 않습니다. 3207ms - 노력의 일환으로 JAXB가 더 빨라졌습니다.

는, JAXB에서 더 나은 성능을 얻을, 나는

FileReader fr = new FileReader("myfile.xml"); 
JAXBContext jc = JAXBContext.newInstance(MyObjectList.class); 
Unmarshaller unmarshaller = jc.createUnmarshaller(); 

XMLInputFactory xmlif = XMLInputFactory.newInstance(); 
XMLEventReader xmler = xmlif.createXMLEventReader(fr); 

long beginTime = System.currentTimeMillis(); 
MyObjectList obj = (MyObjectList)unmarshaller.unmarshal(xmler); 
long endTime = System.currentTimeMillis(); 

이 그것도 느린 이동합니다 ... 그것은 수행하여 SAX 구문 분석을 사용할 수 있도록하려고합니다.

내 질문은 입니다. 1. 어떻게 JAXB를 더 빨리 만들 수 있습니까? 2. 어떻게 기본 파싱 메커니즘을 사용하고 있는지 100 % 확신 할 수 있습니까?

답변

2

필자는 이들을 시도하지 않았지만 EclipseLink는 JAXB 구현을 제공합니다. http://www.eclipse.org/eclipselink/moxy.php Jibx는 빠르지 만, JAXB 구현을 생각하지 않습니다. 그것은 똑같은 일을하지만. http://jibx.sourceforge.net/index.html

EclipseLink가 호환되면 드롭 다운하여 시도해 볼 수 있습니다. Jibx를 테스트하려는 노력이 확실하지 않습니다.

+0

1. MOXy는 JAXB 2.1 및 2.2를 준수합니다. 공급자로 사용하는 방법에 대한 정보는 http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html을 참조하십시오. 최신 2.3.2 릴리스 (http://www.eclipse.org/eclipselink/downloads/)를 확인하십시오. JiBX는 JAXB 구현이 아닙니다. –

16

1 - 어떻게 JAXB를 더 빨리 만들 수 있습니까?

StAX 입력에서 언 마샬링하면 올바르게 작동하지만 XMLEventReader 대신 XMLStreamReader를 사용하는 것이 좋습니다. StAX를 이후

XMLInputFactory xmlif = XMLInputFactory.newInstance(); 
XMLStreamReader xmler = xmlif.createXMLStreamReader(fr); 

당신은 기본 파서 WoodStox 같은 다른 구현에서 전환 할 수있는 표준입니다.

2 - 어떻게 기본 구문 분석 메커니즘을 사용하고 있는지 100 % 확신 할 수 있습니까?

여러분이하는 것처럼. JAXB 구현에 XMLStreamReader의 인스턴스를 전달하면 해당 인스턴스가 사용 중인지 확인할 수 있습니다. 반면에 InputStream과 같은 것으로 언 마샬링하면 JAXB 구현은 원하는 파싱 기술을 자유롭게 사용할 수 있습니다. 당신이 Woodstox에 가면 거기뿐만 아니라 성능 페이지를 확인하십시오 : EclipseLink가 목시 (필자는 기술 리드 해요)에 대한

+1

감사합니다. 아, 그래서 SAX 대신 StAX를 사용했습니다. 이것이 JAXB를 사용하는 가장 빠른 방법이라고 생각하십니까? –

+0

아니요, StAX는 두 가지 유형의 리더 인'XMLStreamReader'와'XMLEventReader'를 제공합니다. 'XMLStreamReader' 옵션은 항상 빠릅니다. –

+0

그래,하지만 원래 예제에서는 SAX를 사용하지 않았다. 당신이 제안하는 방식은 약 1800ms (woodstox없이)에 온다. 정상적인 JAXB를 사용하는 것보다 훨씬 느립니다. 왜 이런거야? –

관련 문제