Beispiel #1
0
        public virtual IReturnVector executeFunction(Rete engine, IParameter[] params_Renamed)
        {
            DefaultReturnVector ret = new DefaultReturnVector();

            if (params_Renamed != null && params_Renamed.Length == 1)
            {
                if (params_Renamed[0].StringValue.Equals("objects"))
                {
                    engine.clearObjects();
                }
                else if (params_Renamed[0].StringValue.Equals("deffacts"))
                {
                    engine.clearFacts();
                }
            }
            else
            {
                engine.clearAll();
            }
            DefaultReturnValue rv = new DefaultReturnValue(Constants.BOOLEAN_OBJECT, true);

            ret.addReturnValue(rv);
            return(ret);
        }
Beispiel #2
0
        public void MainTest()
        {
            String rulefile = getRoot("account_5.clp");

            ArrayList objects = new ArrayList();
            //AssertWRules awr = new AssertWRules();

            // Runtime rt = Runtime.getRuntime();
            long total1 = GC.GetTotalMemory(true);
            //long free1 = rt.freeMemory();
            //long used1 = total1 - free1;
            int count = 5000;

            Console.WriteLine("loading file " + rulefile);
            Console.WriteLine("Used memory before creating objects " + total1 + " bytes " +
                              (total1 / 1024) + " Kb");
            for (int idx = 0; idx < count; idx++)
            {
                Account acc = new Account();
                acc.AccountId = "acc" + idx;
                // acc.setAccountId("acc" + ran.Next(4));
                acc.AccountType = "standard";
                acc.First       = Convert.ToString(ran.Next(100000));
                acc.Last        = Convert.ToString(ran.Next(100000));
                acc.Middle      = Convert.ToString(ran.Next(100000));
                acc.OfficeCode  = Convert.ToString(ran.Next(100000));
                acc.RegionCode  = Convert.ToString(ran.Next(100000));
                acc.Status      = "active";
                acc.Title       = "mr";
                acc.Username    = Convert.ToString(ran.Next(100000));
                acc.AreaCode    = Convert.ToString(ran.Next(999));
                acc.Exchange    = Convert.ToString(ran.Next(999));
                acc.Number      = Convert.ToString(ran.Next(999));
                acc.Ext         = Convert.ToString(ran.Next(9999));
                objects.Add(acc);
            }
            long total2 = GC.GetTotalMemory(true);

            //long free2 = rt.freeMemory();
            //long used2 = total2 - free2;
            Console.WriteLine("Used memory after creating objects " + total2 + " bytes " +
                              (total2 / 1024) + " Kb " + (total2 / 1024 / 1024) + " Mb");
            int  loop    = 5;
            long ETTotal = 0;

            for (int idx = 0; idx < loop; idx++)
            {
                Rete engine = new Rete();
                engine.declareObject(typeof(Account), "Account");

                try
                {
                    StreamReader freader = new StreamReader(rulefile);
                    CLIPSParser  parser  = new CLIPSParser(engine, freader);
                    //Object item = null;
                    ArrayList list  = new ArrayList();
                    long      start = DateTime.Now.Ticks;
                    parse(engine, parser, list);
                    long end = DateTime.Now.Ticks;
                    long el  = end - start;
                    // parser.close();
                    //rt.gc();
                    Console.WriteLine("time to parse rules " + el + " ms");
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }

                IEnumerator itr    = objects.GetEnumerator();
                long        start2 = DateTime.Now.Ticks;
                try
                {
                    while (itr.MoveNext())
                    {
                        engine.assertObject(itr.Current, "Account", false, false);
                    }
                }
                catch (AssertException e)
                {
                    Console.WriteLine(e.Message);
                }
                long end2   = DateTime.Now.Ticks;
                long start3 = DateTime.Now.Ticks;
                int  fired  = 0;
                try
                {
                    fired = engine.fire();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
                long end3   = DateTime.Now.Ticks;
                long total3 = GC.GetTotalMemory(true);
                //long free3 = rt.freeMemory();
                //long used3 = total3 - free3;
                Console.WriteLine("Number of rules: " +
                                  engine.CurrentFocus.RuleCount);
                Console.WriteLine("rules fired " + fired);
                Console.WriteLine("Used memory after asserting objects " + total3 + " bytes " +
                                  (total3 / 1024) + " Kb " + (total3 / 1024 / 1024) + " Mb");
                Console.WriteLine("number of facts " + engine.ObjectCount);
                Console.WriteLine("memory used by facts " + (total3 - total3) / 1024 / 1024 + " Mb");
                Console.WriteLine("elapsed time to assert " + (end2 - start2) + " ms");
                Console.WriteLine("elapsed time to fire " + (end3 - start3) + " ms");
                ETTotal += (end2 - start2);
                engine.printWorkingMemory(true, false);
                //engine.close();
                engine.clearAll();
                engine.close();
                //rt.gc();
            }
            Console.WriteLine("Average ET to assert " + (ETTotal / loop) + " ms");
        }
Beispiel #3
0
        public void testRetractNoShadow()
        {
            Console.WriteLine("testRetractNoShadow");
            Random    ran     = new Random();
            ArrayList objects = new ArrayList();
            // Runtime rt = Runtime.getRuntime();
            long total1 = GC.GetTotalMemory(true);
            //long free1 = rt.freeMemory();
            //long used1 = total1 - free1;
            int count = 50000;

            Console.WriteLine("Used memory before creating objects " + total1 + " bytes " +
                              (total1 / 1024) + " Kb");
            for (int idx = 0; idx < count; idx++)
            {
                Account acc = new Account();
                acc.AccountId   = Convert.ToString(ran.Next(100000));
                acc.AccountType = Convert.ToString(ran.Next(100000));
                acc.First       = Convert.ToString(ran.Next(100000));
                acc.Last        = Convert.ToString(ran.Next(100000));
                acc.Middle      = Convert.ToString(ran.Next(100000));
                acc.OfficeCode  = Convert.ToString(ran.Next(100000));
                acc.RegionCode  = Convert.ToString(ran.Next(100000));
                acc.Status      = Convert.ToString(ran.Next(100000));
                acc.Title       = Convert.ToString(ran.Next(100000));
                acc.Username    = Convert.ToString(ran.Next(100000));
                acc.AreaCode    = Convert.ToString(ran.Next(999));
                acc.Exchange    = Convert.ToString(ran.Next(999));
                acc.Number      = Convert.ToString(ran.Next(999));
                acc.Ext         = Convert.ToString(ran.Next(9999));
                objects.Add(acc);
            }
            long total2 = GC.GetTotalMemory(true);

            //long free2 = rt.freeMemory();
            //long used2 = total2 - free2;
            Console.WriteLine("Used memory after creating objects " + total2 + " bytes " +
                              (total2 / 1024) + " Kb " + (total2 / 1024 / 1024) + " Mb");
            Rete engine = new Rete();

            engine.declareObject(typeof(Account));
            IEnumerator itr   = objects.GetEnumerator();
            long        start = DateTime.Now.Ticks;

            try
            {
                while (itr.MoveNext())
                {
                    engine.assertObject(itr.Current, null, false, false);
                }
            }
            catch (AssertException e)
            {
                Console.WriteLine(e.Message);
            }
            long end      = DateTime.Now.Ticks;
            long assertET = end - start;
            long total3   = GC.GetTotalMemory(true);

            //long free3 = rt.freeMemory();
            //long used3 = total3 - free3;
            //rt.gc();
            Console.WriteLine("Used memory after asserting objects " + total3 + " bytes " +
                              (total3 / 1024) + " Kb " + (total3 / 1024 / 1024) + " Mb");
            Console.WriteLine("number of facts " + engine.ObjectCount);
            Console.WriteLine("memory used by facts " + (total3 - total3) / 1024 / 1024 + " Mb");
            Console.WriteLine("elapsed time is assert " + assertET + " ms");
            // now retract
            IEnumerator itr2     = objects.GetEnumerator();
            long        retstart = DateTime.Now.Ticks;

            try
            {
                while (itr2.MoveNext())
                {
                    engine.retractObject(itr2.Current);
                }
            }
            catch (RetractException e)
            {
                Console.WriteLine(e.Message);
            }
            long retend    = DateTime.Now.Ticks;
            long retractET = retend - retstart;
            long total4    = GC.GetTotalMemory(true);

            //long free4 = rt.freeMemory();
            //long used4 = total4 - free4;
            objects.Clear();
            engine.clearAll();
            engine.close();
            //rt.gc();
            Console.WriteLine("elapsed time to retract " + retractET + " ms");
            // the retract should be atleast 3 times shorter than the assert
#if DEBUG
            Assert.IsTrue(retractET > 0);
#else
            Assert.IsTrue((assertET > (retractET * 3)));
#endif
        }