作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用Java 2.11版本。我正在基于 CD Catalog 数据绑定(bind)示例构建 xml 绑定(bind)组件。我有一个相当复杂但相当小的文档,大约 2000 字节。而且 AutoPilot.bind() 似乎很慢......
int count = 10000;
long start = System.nanoTime();
for(int i = 0; i <= count; i++)
{
//Init VTDGen, VTGNav here...
AutoPilot ap0 = new Autopilot();
AutoPilot ap1 = new Autopilot();
AutoPilot ap2 = new Autopilot();
AutoPilot ap3 = new Autopilot();
AutoPilot ap4 = new Autopilot();
// Set the XPAth for auto pilots here...
// Read bytes and parse...
// Bind autopilot to NAV.
MyObj mine = new MyObj();
// Do data binding here to My Object here...
}
long end = System.nanoTime();
long avgTime = (end - start) / count;
硬件 = 3GH 8 核英特尔
平均解析时间约为 80000 纳秒。
现在,如果将 Autopilot 的创建移出循环,则平均解析时间为 10000 纳秒。
当然,这在这里是有效的,因为我们一遍又一遍地解析同一个文档。现在想象一个像 servlet 这样的服务器场景,其中每个请求都会解析接收到的 XML 文档。如果我们可以重用自动驾驶仪而不是创建一个新的自动驾驶仪,那就太好了。
我记得在某处读到过创建一个自动驾驶仪池,但这并不有趣,尤其是当你有十几个自动驾驶仪时。
最佳答案
我认为您可能想要做的是为每个线程创建一些包含 XPath 表达式的 autoPilot 对象。假设您必须创建 10 个线程都处理 XPath/a/b/c,那么您只需实例化 10 个线程,每个线程编译相同的表达式,从而避免共享问题。
另请注意,不要在任何类型的 XPath 求值 while 循环中编译 XPath 表达式,因为它会减慢速度。尽可能将其从循环中取出。
管理线程池可能很有意义,因为您可以重用 AutoPilot 对象,并避免重复编译 XPath 表达式。让 AutoPilot 线程安全可能不是一个好主意,因为它会导致您的线程停止,等待另一个线程释放锁。
关于vtd-xml - VTD自动驾驶仪可以线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728143/
我是一名优秀的程序员,十分优秀!