1

我们正在实施一个具有两个后端组件的事务系统:

  • 组件 A 生成初始 XML 响应
  • 组件 B 修改初始响应 XML

生成的 XML 被发送回请求者。由于我们可能会在重负载下执行此操作,因此我想以非常高效的 CPU/内存方式执行此操作。

在严格控制整体内存利用率的同时执行上述操作的最佳方法是什么?

具体来说,我最好对组件 A 的输出进行 DOM 解析并将其传递给组件 B 以在内存中修改吗?有没有更好的方法使用 SAX 来做到这一点,它可能更节省内存?是否有通过 SAX 或 DOM 执行此操作的标准库?

感谢您的任何见解。

-拉吉

4

3 回答 3

3

通常,SAX 比 DOM 更节省内存,因为不需要将整个文档加载到内存中进行处理。但是,答案取决于您的“组件 B 修改初始响应 XML”要求的细节。

  • 如果每个更改都对它自己的 XML 子树来说是本地的(即,您可能需要来自通向树根的所有节点的数据,而不是兄弟节点的数据),那么 SAX 会更好地工作。
  • 如果更改需要引用同级来产生结果,则 DOM 会更好地工作,因为它可以让您避免构建自己的数据结构来存储同级。
于 2012-06-18T19:54:03.450 回答
1

将 XSL-T 转换应用于初始 XML 响应的组件 B 上的方面或过滤器可能是完成它的一种简洁方法。内存利用率取决于请求的大小和内存中的实例数。CPU 也将取决于这两个因素。

DOM 要求在修改之前将整个 XML 文档驻留在内存中。如果只是需要更改几个元素,那么 SAX 是一个不错的选择。

于 2012-06-18T19:35:19.877 回答
0

SAX 是一个基于事件的解析实用程序。您会收到诸如 beginDocument()、startElement()、endElement() 等事件的通知。您将希望保存的内容保存在内存中。您只控制您想要的事件,这可以真正提高解析速度并减少内存使用。它可以提高内存效率,具体取决于您在内存中保存的内容和数量。对于一般情况,与 DOM 相比,SAX 的内存效率更高。DOM 会将整个文档保存在内存中以便对其进行处理。

于 2012-06-18T19:54:56.560 回答