我怎样才能知道每个 drools 条件/结果的执行频率以及执行时间?
对于此目的,常见的 JVM 分析器级别太低,因为内部 drools 方法的名称不会告诉您它们正在执行什么规则。
最佳答案
这个问题对于条件评估来说基本上是不可能回答的。左侧的模式和约束不是作为一个单元计算的(在某种意义上,Java 方法是一个单元),而是作为一个表达式网络,在必要时分批计算。此外,出现在多个条件下的约束可能会产生相同的代码,从而消除多重评估。评估的必要性取决于事实的插入、删除和修改;努力因这些事实中的值(value)观而异。所有这些都是底层算法的结果,最初是 Dr. Forgy 的 Rete,在 Drools 6.x 中是 Phreaky,这显然通过提高效率使情况变得更加不那么简单。
条件基准测试可以通过插入一个类的事实同时改变它们的字段值和计时来完成(考虑到 Java 遇到的常见困难)。请注意,即使这是危险的,因为工作量可能取决于工作内存的当前状态,即已插入的其他类的事实值。并且您必须考虑重新建立初始状态所需的工作量 - 将事实留在 WM 中最终会由于内存管理而导致开销增加。
约束评估的情况要好一些。 kaskelotti 关于使用事件监听器的提示值得注意;与其尝试计算这些短时间间隔,不如数一数。另请注意,对于许多 Drools 应用程序而言,将右侧实现为(静态)Java 方法可能是良好的编码习惯:这些可以更轻松地进行单元测试(和基准测试)。
关于java - 您如何分析 Drools 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361424/