XML解析太慢了!

时间:2011-06-01 16:51:44

标签: java xml parsing optimization xml-parsing

我编写了一个Java应用程序,用于使用XML与Web应用程序进行通信。部署之后,我发现解析Web应用程序生成的XML需要很长时间。

例如,登录大约需要2分钟;登录信息包含在网址中。 Web应用程序执行其处理并响应Java应用程序,无论登录是否使用返回的XML成功。

我使用标准的java DOM解析。

我有没有办法优化这个过程,以便活动更快?

4 个答案:

答案 0 :(得分:26)

我遇到了同样的问题,并设法通过关闭DocumentBuilder默认执行的所有验证来加速解析器:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

factory.setNamespaceAware(false);
factory.setValidating(false);
factory.setFeature("http://xml.org/sax/features/namespaces", false);
factory.setFeature("http://xml.org/sax/features/validation", false);
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

// then take a builder via `factory.newDocumentBuilder()` and parse doc with that builder

答案 1 :(得分:2)

parse方法总是占用,因为它正在等待来自其他应用程序的输入。你需要将两者分开,这样你才能看到发生了什么。将其他应用程序中的XML读入ByteArrayOutputStream,然后完成后,将输出流复制到输入流(您可以使用commons-io)并将其提供给解析器。然后看看一直在做什么。

您可以优化的一件事是您的登录过程。您可以使用LDAP服务器进行身份验证,LDAP针对读取进行了优化,您可以使用JNDI访问它。

答案 2 :(得分:2)

使用标准XML解析器时,应该在大约一毫秒内解析一条短消息。使用自定义解析器,您可以将其减少到大约20微秒。任何比这更长的时间都不在XML解析

答案 3 :(得分:0)

@Nathan说了什么,加上我建议做一些random pausing,而这需要花费很多时间。 我在过去遇到过这种情况,并发现它不是花费时间的解析,而是解析时数据结构的创建和操作。 你可能会看到不同的东西,但很可能是一个惊喜。