[jboss-jira] [JBoss JIRA] (JBRULES-1471) Accumulate should not call getResult() more then necessary
Geoffrey De Smet (JIRA)
jira-events at lists.jboss.org
Wed Feb 1 05:27:09 EST 2012
[ https://issues.jboss.org/browse/JBRULES-1471?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Geoffrey De Smet updated JBRULES-1471:
--------------------------------------
Fix Version/s: 5.4.0.Beta3
(was: 5.4.0.Beta2)
> Accumulate should not call getResult() more then necessary
> ----------------------------------------------------------
>
> Key: JBRULES-1471
> URL: https://issues.jboss.org/browse/JBRULES-1471
> Project: Drools
> Issue Type: Task
> Security Level: Public(Everyone can see)
> Components: drools-core (expert)
> Reporter: Geoffrey De Smet
> Assignee: Edson Tirelli
> Fix For: 5.4.0.Beta3
>
>
> For this rule:
> rule "roomCapacityTooSmall" // TODO it takes 50-90% of the performance of drools-solver
> when
> $period : Period();
> $room : Room($capacity : capacity);
> $totalStudentSize : Number(intValue > $capacity) from accumulate(
> Exam(period == $period, room == $room, $studentSize : topicStudentSize),
> sum($studentSize)
> );
> ...
> end
> Outside drl, I update 2 out of 700 Exam objects and call fireAllRulesAndCalculateDecisionScore.
> The drl never changes an Exam. Period and Room never change.
> That results into this log:
> Breakpoint reached at org.drools.solver.core.evaluation.EvaluationHandler.fireAllRulesAndCalculateDecisionScore(EvaluationHandler.java:90)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.reverse(SumAccumulateFunction.java:62)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.accumulate(SumAccumulateFunction.java:53)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.reverse(SumAccumulateFunction.java:62)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.accumulate(SumAccumulateFunction.java:53)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.reverse(SumAccumulateFunction.java:62)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.accumulate(SumAccumulateFunction.java:53)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.reverse(SumAccumulateFunction.java:62)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.accumulate(SumAccumulateFunction.java:53)
> Breakpoint reached at org.drools.base.accumulators.SumAccumulateFunction.getResult(SumAccumulateFunction.java:70)
> There are 4 accumulate calls and 4 reverse calls. That might be accurate.
> There are 8 getResult calls, that should only be 1.
> Also, the getResult method creates a new Double instance each time:
> return new Double( data.total );
> It might be better to do
> return Double.valueOf(data.total);
> to allow the JVM to hot spot optimize it.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list