예제 #1
0
        private ThroughputTestResult RunConcurrently(int threads)
        {
            var messages = CreateMessages();
            var sut      = _serialDisposableFactory();

            Program.Clean();

            var result = new ThroughputTestResult(threads, RunSize);

            Parallel.ForEach(
                messages,
                new ParallelOptions {
                MaxDegreeOfParallelism = threads
            },
                (item, state, idx) => _assign(sut, item));

            sut.Dispose();
            result.Dispose();

            if (messages.Any(b => !b.IsDisposed))
            {
                Console.WriteLine($"{sut.GetType().Name} operated incorrectly. There are still {messages.Count(b => !b.IsDisposed)} objects not disposed.");
                return(ThroughputTestResult.InvalidResult(threads, RunSize));
            }

            return(result);
        }
예제 #2
0
        private ThroughputTestResult RunSynchronously()
        {
            var messages = CreateMessages();
            var sut      = _serialDisposableFactory();

            Program.Clean();

            var result = new ThroughputTestResult(1, RunSize);

            foreach (var item in messages)
            {
                _assign(sut, item);
            }
            sut.Dispose();
            result.Dispose();
            Console.WriteLine($"Elapsed {result.Elapsed.TotalSeconds}sec");
            if (messages.Any(b => !b.IsDisposed))
            {
                Console.WriteLine($"{sut.GetType().Name} operated incorrectly. There are still {messages.Count(b => !b.IsDisposed)} objects not disposed.");
                return(ThroughputTestResult.InvalidResult(1, RunSize));
            }
            return(result);
        }