and the code to invoke? I assume you have 50000 instances of AlarmDefine in
wm? (that is implied).
On 4/26/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>
>
> Thanks, the whole rule file:
>
> package com.datangmobile.rules
>
> import com.datangmobile.rules.alarmdefine;
> import com.datangmobile.rules.alarm;
>
> rule "alarmdefine"
> no-loop true
> when
> #conditions
> alarm(reason:alarmreason, level:alarmlevel)
> alarmdefine(alarmreason==reason, alarmlevel!=level)
> then
> #actions
> alarm.setCounter();
> end
>
> alarmdefine object:
> package com.datangmobile.rules;
>
> public class alarmdefine {
>
> private int alarmreason;
> private int alarmlevel;
> private int objtype;
> private int alarmtype;
>
> public int getAlarmlevel() {
> return alarmlevel;
> }
> public void setAlarmlevel(int alarmlevel) {
> this.alarmlevel = alarmlevel;
> }
> public int getAlarmreason() {
> return alarmreason;
> }
> public void setAlarmreason(int alarmreason) {
> this.alarmreason = alarmreason;
> }
> public int getAlarmtype() {
> return alarmtype;
> }
> public void setAlarmtype(int alarmtype) {
> this.alarmtype = alarmtype;
> }
> public int getObjtype() {
> return objtype;
> }
> public void setObjtype(int objtype) {
> this.objtype = objtype;
> }
> }
>
> alarm object:
> package com.datangmobile.rules;
>
> public class alarm {
>
> private int alarmreason;
> private int alarmlevel;
> private int objtype;
> private int alarmtype;
> private String dn;
>
> static private int counter = 0;
>
> public int getAlarmlevel() {
> return alarmlevel;
> }
> public void setAlarmlevel(int alarmlevel) {
> this.alarmlevel = alarmlevel;
> }
> public int getAlarmreason() {
> return alarmreason;
> }
> public void setAlarmreason(int alarmreason) {
> this.alarmreason = alarmreason;
> }
> public int getAlarmtype() {
> return alarmtype;
> }
> public void setAlarmtype(int alarmtype) {
> this.alarmtype = alarmtype;
> }
> public String getDn() {
> return dn;
> }
> public void setDn(String dn) {
> this.dn = dn;
> }
> public int getObjtype() {
> return objtype;
> }
> public void setObjtype(int objtype) {
> this.objtype = objtype;
> }
>
> static public void setCounter(){
>
> counter++;
> }
>
> static public int getCounter(){
> return counter;
> }
> }
>
>
>
> can you provide your objects that you are using, and the whole rule file?
>
> On 4/26/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> >
> > Dear user group:
> >
> > I have a queston about the performance of drools3.0.
> > My only one rule is:
> >
> > rule "alarmdefine"
> > no-loop true
> > when
> > #conditions
> > alarm(reason:alarmreason, level:alarmlevel)
> > alarmdefine(alarmreason==reason, alarmlevel!=level)
> > then
> > #actions
> > alarm.setCounter();?
> > end
> >
> > My eviroment: eclipse3.2M5, jdk1.4.2-03
> > Testcode is :
> >
> > for(int i=1; i<1000; i++)
> > {
> > alarm malarm = new alarm();
> > malarm.setAlarmreason(i);
> > malarm.setAlarmlevel(1);
> > malarm.setObjtype(1);
> > malarm.setAlarmtype(1);
> > workingMemory.assertObject( malarm );
> > workingMemory.fireAllRules();
> > }
> >
> > when alarmdefine exist 50000 record, execute time is 20s
> > when alarmdefine exist 5000 recode, execute time is 2s
> >
> > Then I have done the same test with JESS, the rule is:
> >
> > (defrule alarm-cleared-all
> > (alarm (alarmreason ?a) (alarmlevel ?x) )
> > (alarmdef (alarmreason ?a) (alarmlevel ?y&:(<> ?y ?x)))
> > =>
> > (call alarm setCounter)
> > )
> >
> > when alarmdefine exist 50000 record, execute time is only 0.2s
> >
> > Great difference! Why? What can I do?
> >
> > Thanks
> > Wangwei
> >
>