我有一个大小为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();
这会使它变得更慢 - 3207毫秒。
我的问题是: 1. 如何让JAXB运行更快? 2. 如何确保它正在使用什么底层解析机制?
XMLStreamReader
和XMLEventReader
。XMLStreamReader
选项始终是更快的。 - bdoughanFileReader
进行非编组吗?你使用Woodstox获得了什么性能数字?在处理数据或执行直接解析时,使用SAX或DOM数字吗? - bdoughan