gpt4 book ai didi

java - 口水融合 : measure performance

转载 作者:行者123 更新时间:2023-12-02 03:40:49 29 4
gpt4 key购买 nike

我想根据规则的数量和规则的复杂性来衡量流口水的表现。因此,我需要测量处理事件所需的时间。我想编写一个像这样的简单测试:

long start = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
insertHeartRate(150, 0, macAddress);
ksession.fireAllRules();
}
long stop = System.currentTimeMillis();
System.out.println("Running time: " + (stop - start));

我面临的问题是这不起作用,因为您可以插入尽可能多的内容您想要的事件和 drools 稍后会处理它们。那么这个时间点显然,部分总是小于一秒。所以我的问题是我怎样才能处理完所有事件后调用long stop = System.currentTimeMillis()

最佳答案

fireAllRules 在一切发生后返回。因此,您发布的代码确实会测量插入这些事件以及触发所有触发规则所用的时间。

如果您的规则启动了稍后执行的计时器:那是另一回事。此外,您正在解决 Fusion:这些事件不会根据紧密循环到达,并且时间戳和窗口:时间和时间运算符:没有任何内容会按照您的规则中的预期工作。

如果没有时间运算符或window:time,您可以先测量插入事实所需的时间,然后测量fireAllRules的持续时间。

所有这些都高度依赖于 Java 的 JIT、GC 行为和 CPU 的一些细节...

编辑查看您的代码后,我可以添加另一个建议。确保您有一个包含插入和规则执行的事件序列。要么在一个线程中运行所有内容 - inserts 和 fireAllRules,一次或重复 - 并测量前后的时间。或者,在一个线程中运行 fireUntilHalt,测量时间并插入到另一个线程中。现在,要查看最后一次插入后一切都消失的时间,您必须构建一些东西来捕捉那一刻。一种方法是插入一些特殊事实,触发显着性非常低的规则,并测量其结果的结束时间。

关于java - 口水融合 : measure performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36846024/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com