【发布时间】:2015-09-25 18:33:45
【问题描述】:
我在 JBPM 中插入大量事实以进行规则匹配,一旦规则匹配,我就会执行所需的适当操作。事实的数量会很多,内存中有 20k 的事实大小 JBPM 需要以下时间来做以下事情:
Start Process - 3-4 seconds
Insert Fact - 4+ seconds
FireAllRules - 3-4 seconds.
有人可以帮我了解导致这些延迟的原因吗?
【问题讨论】:
我在 JBPM 中插入大量事实以进行规则匹配,一旦规则匹配,我就会执行所需的适当操作。事实的数量会很多,内存中有 20k 的事实大小 JBPM 需要以下时间来做以下事情:
Start Process - 3-4 seconds
Insert Fact - 4+ seconds
FireAllRules - 3-4 seconds.
有人可以帮我了解导致这些延迟的原因吗?
【问题讨论】:
启动该过程可能包括规则编译,这取决于 DRL 文件中的规则或代码行数。
4+ 秒是由于对所有插入事实的所有规则条件的评估。当然,这不仅取决于事实的数量,还取决于左侧代码(条件)的复杂性。不检查规则就不能说 4+ 秒是否足够。
您可以根据右侧代码(后果)轻松跟踪触发规则的含义。您已经对此进行了编码,并且可以使用事件侦听器非常轻松地对其进行监控。如果这太慢,请检查该代码的作用以及方式。
【讨论】:
fireAllRules() 还包括在 RETE(或者我应该说是 PHREAK?)算法中对 beta 网络的评估。