void Executive_ExecutiveStarted_SingleShot2(IExecutive exec) { RandomServer r = new RandomServer(12345, 1000); Randoms.IRandomChannel rc = r.GetRandomChannel(98765, 1000); double howMuch = 0.0; DateTime when = new DateTime(2008, 08, 01, 12, 00, 00); for (int i = 0; i < 1000; i++) { int key = rc.Next(0, 2); int deltaT = rc.Next(0, 2); howMuch = rc.NextDouble() * 100.0; switch (key) { case 0: m_howMuchPut += howMuch; Console.WriteLine("{0} : Add {1} kg.", when, howMuch); AddSomeMaterial(when, m_mt1.CreateMass(howMuch, AMBIENT_TEMPERATURE)); break; case 1: m_howMuchRetrieved += howMuch; Console.WriteLine("{0} : Try to remove {1} kg.", when, howMuch); RequestMaterial(when, howMuch); break; case 2: Console.WriteLine("{0} : Confirm bookkeeping.", when); ConfirmTotlMass(when); break; default: break; } when += TimeSpan.FromMinutes(deltaT); } // Now, if there are outstanding requests, satisfy them. howMuch = m_howMuchRetrieved - m_howMuchPut; if (howMuch > 0) { Console.WriteLine("{0} : Add {1} kg.", when, howMuch); AddSomeMaterial(when, m_mt1.CreateMass(howMuch, AMBIENT_TEMPERATURE)); } m_howMuchPut = 0.0; m_howMuchRetrieved = 0.0; Console.WriteLine("Starting Test..."); }
private void PerfTestExecute(IExecutive exec, object userData) { Randoms.IRandomChannel rch = (Randoms.IRandomChannel)userData; if (rch.NextDouble() < 0.405 && exec.EventCount < eventCountCeil) { int nNewEvents = rch.Next(1, 5); for (int i = 0; i < nNewEvents; i++) { DateTime when = exec.Now + TimeSpan.FromMinutes(rch.NextDouble() * 100); if (rch.NextDouble() < pctSynchronous) { exec.RequestEvent(new ExecEventReceiver(PerfTestExecute), when, 0.0, rch); } else { exec.RequestEvent(new ExecEventReceiver(PerfTestExecute), when, 0.0, rch, ExecEventType.Detachable); } } } }
public void TestPerformance() { IExecutive exec1 = ExecFactory.Instance.CreateExecutive("Highpoint.Sage.SimCore.Executive", Guid.NewGuid()); Randoms.RandomServer rsvr = new Highpoint.Sage.Randoms.RandomServer(012345, 1000); Randoms.IRandomChannel rch = rsvr.GetRandomChannel(987654321, 1000); DateTime timeCursor = new DateTime(2009, 1, 1, 0, 0, 0); eventCountCeil = 180000; pctSynchronous = 0.0; for (int i = 0; i < 100; i++) { timeCursor += TimeSpan.FromMinutes(rch.NextDouble() * 100); exec1.RequestEvent(new ExecEventReceiver(PerfTestExecute), timeCursor, 0.0, rch); } DateTime then = DateTime.Now; exec1.Start(); TimeSpan howLong = DateTime.Now - then; Console.WriteLine("Serviced " + exec1.EventCount + " events in " + howLong.TotalMilliseconds + " msec."); }