Example #1
0
        public void TestRecycle1()
        {
            using (var queue = new PendingMethodsQueue())
            {
                queue.IsConnected = true;

                const int num   = 20;
                var       calls = new PendingMethodCall[num];
                for (int i = 0; i < 20; ++i)
                {
                    calls[i] = queue.Enqueue(1, "foo", "bar", null, i);
                }

                var extraCall = queue.Enqueue(1, "foo", "bar", null, 20);

                int unused;
                for (int i = 0; i < 20; ++i)
                {
                    queue.TakePendingWrite(out unused);

                    var call = calls[i];
                    queue.Recycle(call);
                    queue.RecycledMessages.Should().BeEquivalentTo(calls.Take(i + 1));
                }

                // Recycling the 21st message shall NOT put it into the queue
                // of recycled messages. We've kept enough messages around - there's
                // no need for more.
                queue.TakePendingWrite(out unused);
                queue.Recycle(extraCall);
                queue.RecycledMessages.Should().NotContain(extraCall);
                queue.RecycledMessages.Should().BeEquivalentTo(calls);
            }
        }
Example #2
0
        public void TestEnqueuePerformanceOneClient()
        {
            const int count = 1000000;
            var       queue = new PendingMethodsQueue(maxConcurrentCalls: count)
            {
                IsConnected = true
            };

            // Warm-up...
            var stream = new MemoryStream();

            for (int i = 0; i < 100000; ++i)
            {
                var call = queue.Enqueue(1, "", "", stream, i);
                int unused;
                queue.TakePendingWrite(out unused);
                queue.Recycle(call);
            }

            var watch = new Stopwatch();

            watch.Start();
            for (int i = 0; i < count; ++i)
            {
                queue.Enqueue(1, "", "", stream, i);
            }
            watch.Stop();

            var numSeconds = watch.Elapsed.TotalSeconds;
            var ops        = 1.0 * count / numSeconds;

            Console.WriteLine("Total calls: {0}", count);
            Console.WriteLine("OP/s: {0:F2}k/s", ops / 1000);
            Console.WriteLine("Latency: {0}ns", watch.ElapsedTicks * 100 / count);
        }