如果我有一个modify语句和多个Modify语句,在Drools重新考虑要触发的新批量规则的方式上有什么不同吗,如下所示
rule "Multiple Modify Statements"
dialect "mvel"
when
$m : Message( status == Message.HELLO )
then
modify ( $m ) { message = "Hope" };
modify ( $m ) { status = Message.GOODBYE };
end
rule "Single Modify Statements"
dialect "mvel"
when
$m : Message( status == Message.HELLO )
then
modify ( $m ) { message = "Never Give Up",
status = Message.GOODBYE };
end而且,是否有任何性能影响。
实际上,我们正在尝试创建一个excel决策表,每个列都有操作,因此多个修改语句更可取,因为这些语句可以在excel文件中由多个列表示。
任何真知灼见都会受到高度赞赏。
发布于 2016-07-02 19:14:23
这个问题很有趣。
Drools中规则的RHS被编译成Java类。如果您查看示例中生成的类,您将看到以下内容:
使用2条modifies语句时,会生成以下代码:
$m.setMessage("Hope");
update($m);
$m.setStatus(Message.GOODBYE);
update($m);现在,当使用单个修改语句时,生成的代码如下所示:
$m.setMessage("Hope");
$m.setStatus(Message.GOODBYE);
update($m);不同之处在于调用方法update的次数。此方法触发与Message类相关的任何条件的求值。
我假设在使用单个modify时会有某种性能上的好处,但我不能向您保证这种好处是否明显。我想您在这里唯一的选择就是准备一个基准测试,这样您就可以自己测量性能增益(如果有的话)。
希望能有所帮助,
https://stackoverflow.com/questions/38159269
复制相似问题