我怎样才能知道每个流口水的状况/后果的执行频率以及需要多长时间?
由于内部drools方法的名称不会告诉您它们正在执行的规则,因此常见的JVM分析器对于此目的来说太低级别.
最佳答案 问题基本上不可能回答条件评估.左侧的模式和约束不会被评估为一个单元(在某种意义上,
Java方法是一个单元),而是作为表达式网络,在必要时以小分期进行评估.此外,在多个条件下发生的约束可能导致相同的代码,从而消除了多个评估.评估的必要性取决于事实的插入,删除和修改;努力取决于这些事实中的价值.所有这一切都是基础算法的结果,最初是Forgy博士的Rete,在Drools 6.x,Phreaky,显然通过提高效率使情况变得更加简单.
对条件进行基准测试可以通过插入一个类的事实来改变它们的字段值并对其进行计时(考虑到Java遇到的常见困难)来完成.注意,即使这是危险的,因为努力可能取决于工作记忆的当前状态,即已插入的其他类的事实的值.而且你必须考虑重新建立初始状态所需的努力 – 在WM中留下事实最终会因内存管理而导致开销增加.
约束评估的情况稍好一些. kaskelotti关于使用事件监听器的提示是值得注意的;而不是试图计算这些短暂的时间间隔,只计算它们.另请注意,对于许多Drools应用程序来说,将右侧实现为(静态)Java方法可能是一种很好的编码实践:这些可以更容易地进行单元测试(和基准测试).