12

私は8メグのファイルを持っています。JAXBを使用したマーシャリングには1082ミリ秒、DOMを使用した場合は862ミリ秒、SAXを使用した場合は438ミリ秒かかります。これは、JDK 1.6ですべてのデフォルトを使用しており、woodstoxの使用などの追加の構成は使用されません。

JAXBのパフォーマンスを向上させるために、次のようにしてSAX解析を使用するようにしています...

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();

これにより、さらに遅くなります-3207ms。

私の質問は次のとおりです。1。JAXBを高速化するにはどうすればよいですか。2.使用している基本的な解析メカニズムを100%確認するにはどうすればよいですか?

4

2 に答える 2

16

1 - JAXB を高速化するにはどうすればよいですか?

StAX 入力からのアンマーシャリングで正しい軌道に乗っていますが、XMLEventReader の代わりに XMLStreamReader をお勧めします。

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

StAX は標準であるため、基礎となるパーサーとしてWoodStoxなどの別の実装に切り替えることができます。

2 - 使用している基本的な解析メカニズムを 100% 確認するにはどうすればよいですか?

あなたがしているように。JAXB 実装を のインスタンスに渡すと、XMLStreamReaderそれが使用されていることを合理的に確信できます。一方、 のようなものから非整列化したInputStream場合、JAXB 実装は、必要な解析手法を自由に使用できます。Woodstox を使用する場合は、パフォーマンス ページもチェックしてください。

于 2011-12-24T19:11:59.573 に答える
2

私はこれらを試したことはありませんが、EclipseLink は JAXB 実装を提供します。http://www.eclipse.org/eclipselink/moxy.php Jibx は高速であるはずですが、JAXB 実装ではないと思います。それは同じことをしますが。http://jibx.sourceforge.net/index.html

EclipseLink が準拠している場合は、ドロップインして試すだけでよいはずです。Jibx をテストする努力については不明です。

于 2011-12-24T18:35:30.033 に答える