我正在使用 Xpath 来红色 XML 文件。文件的大小是未知的(在 700Kb - 2Mb 之间),每秒必须读取大约 100 个文件。所以我想要一种快速加载和读取 Xpath 的方法。
我尝试使用 java nio 文件通道和内存映射文件,但很难与 Xpath 一起使用。那么有人可以告诉一种方法吗?
很大程度上取决于 XPath 表达式的作用。这里有四个成本:读取文件的基本 I/O、XML 解析、树构建和 XPath 评估。(加上可能的第五个,生成输出,但您没有提到输出可能是什么。)根据您的描述,我们无法知道哪个因素占主导地位。绩效改进的第一步始终是衡量,而我的第一步是尝试衡量这四个因素的贡献。
如果您在具有多个处理器的环境中(谁不是?),那么并行执行将是有意义的。如果您可以使用 Saxon-EE 中的 collection() 函数来组织处理,则可以“免费”获得这个。
如果我是你,我可能会在这种情况下完全放弃 Java,不是因为你不能在 Java 中这样做,而是因为使用一些 bash 脚本(如果你在 Unix 上)会更快,至少这个这是我处理大量文件的经验告诉我的。
在 *nix 上,您有一个名为xpath的实用程序正是为此而设计的。
由于您正在执行大量 I/O 操作,因此拥有一个像样的 SSD 磁盘会更有帮助,然后在单独的线程中执行它。您仍然需要使用多个线程来执行此操作,但每个 CPU 不超过一个。
如果您想要性能,我会完全放弃 XPath 并使用 SAX 解析器来读取文件。您可以在 Stackoverflow 中搜索 SAX、XPath 和 DOM 类型的问题,以获取更多详细信息。与 DOM 和SAX相比,XPath 效率更高吗?