0

使用esper或者nesper我可以直接从运行时发出事件,如下所示:

EPRuntime runtime = provider.getEPRuntime();
MyCustomEvent e = new MyCustomEvent("foo");
runtime.sendEvent(order);

或者我可以像这样使用自定义事件发送器:

EventSender sender = epService.EPRuntime.GetEventSender("MyCustomEvent");
MyCustomEvent e = new MyCustomEvent("foo");
sender.SendEvent(e);

我已经尝试过计时,看起来自定义事件发送器可能会更快,尽管它似乎与我所看到的并没有太大的性能差异。

是否有令人信服的理由选择一种方法而不是另一种方法?

如果我使用 custom 的第二种方法,EventSender缓存EventSender我从运行时获得的内容是否安全,这样我就不必每次都查询它?

4

1 回答 1

0

与往常一样,出色的esper文档提供了我正在寻找的答案:

文档 中,他们讨论了EventSender这样输入的好处:

此工具可以减少事件对象反射和类型查找的开销,因为事件发送者始终与单个具体事件类型相关联。

对于由 Java 类支持的事件(JavaBean 事件),事件发送者确保事件对象等于底层类,或者实现或扩展给定事件类型名称的底层类。

所以看起来答案是使用自定义事件可以为您提供类型安全性,并且可能由于运行时不必中断反射来确定正在推送的事件类型而可能获得一些性能提升。

于 2013-06-06T17:54:51.463 回答