Ejemplo n.º 1
0
        public void HundredQeWithThousandSubscriptions()
        {
            const int NumberOfEngines       = 100;
            const int NumberOfSubscriptions = 1000;

            // Creating engines.
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            var engines = new List <ICheckpointingQueryEngine>();
            var tasks   = new List <Task>();
            var sources = new ConcurrentQueue <MockObservable <int> >();

            for (int i = 0; i < NumberOfEngines; ++i)
            {
                var engine = CreateQueryEngine();
                engines.Add(engine);
                tasks.Add(new TaskFactory().StartNew(() => AddSubscriptions(engine, sources, NumberOfSubscriptions)));
            }
            Task.WaitAll(tasks.ToArray());
            stopwatch.Stop();

            Trace.WriteLine(
                string.Format("Time for creation of '{0}' engines with '{1}' subscriptions each: '{2}' milliseconds.",
                              NumberOfEngines,
                              NumberOfSubscriptions,
                              stopwatch.ElapsedMilliseconds));

            // Sending events.
            var inputs = sources.ToArray();

            stopwatch.Restart();
            for (int j = 0; j < 100; j++)
            {
                foreach (var source in inputs)
                {
                    source.OnNext(j);
                }
            }

            foreach (var input in inputs)
            {
                var result = MockObserver.Get <int>(input.Id);
                if (result == null || !result.WaitForCount(100, TimeSpan.FromSeconds(100)))
                {
                    Assert.Fail("Not everything was received.");
                }
                result.Clear();
            }
            stopwatch.Stop();

            Trace.WriteLine(
                string.Format("Time for processing '{0}' events: '{1}' milliseconds.",
                              100 * inputs.Length,
                              stopwatch.ElapsedMilliseconds));
        }