Drools规则模板-第一次调用比子序列调用慢1000倍
我已经使用Drools 6.4.0.Final构建了Drools规则模板。
它与此处提供的示例几乎相同。
我将其包装在中,Spring
RestController
并作为WAR部署到中Tomcat
。
我注意到第一次调用总是很慢才能得到结果,并且随着xls
电子表格中行数的增加而变得越来越慢。
我想象当第一个KieSession
创建时,流口水会建立一个索引。并且该索引随后被缓存,从而使进一步的调用更快吗?
直接从单元测试调用时,我看到相同的行为。第一次测试很慢,随后的测试快了1000倍。
例如,我看到第一个调用花费30秒,而随后的每个调用花费20毫秒,其中电子表格有约1000行。
当Web应用程序服务器(Tomcat
)启动时,是否有办法强制执行此“索引编制”步骤?
回答:
在您链接的示例中,有一行正在做的事情比看起来正在做的要多。我要说的是:
KieSession ksession = kc.newKieSession( "DTableWithTemplateKS" );
里面的步骤之一KieContainer.newKieSession()
是创建KieBase
指定的KieSession
所属。A
KieBase
是规则的二进制表示形式。一旦KieBase
建成,它可以被用来生成多个KieSessions
(与其对应运行时)。创建a
KieBase
可能非常耗时。KieSessions
从它产生新的不是。
本KieContainer
类使用内部地图,以保持该基准KieBases
已经建立了。第一次你问KieContainer
一个KieSession
的KieContainer
具有率先建成的KieBase
。调用newKieSession()
后将重用已经构建的KieBase。请注意,只要您始终要求相同,便是正确的KieSession
。尝试拥有多个KieBases
并要求与之不同KieSessions
,您会发现,第一次KieSession
从新要求中会有一个KieBase
延迟。
您可以做的一件事是在启动应用程序时询问KieContainer
您KieBase
。您可以通过执行kc.newKieSession( "XXX");
或kc.getKieBase("YYY");
希望能帮助到你,
以上是 Drools规则模板-第一次调用比子序列调用慢1000倍 的全部内容, 来源链接: utcz.com/qa/428028.html