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);
        }
Exemple #2
0
        private static ThroughputTestResult RunOptInpcObs()
        {
            var count  = 0;
            var person = new Person();

            using (person.OnPropertyChangesOpt(p => p.Age)
                   .Subscribe(newAge => count = newAge))
            {
                var result = new ThroughputTestResult(1, MessageCount);
                for (int i = 0; i < MessageCount; i++)
                {
                    person.Age = i;
                }
                result.Dispose();
                return(result);
            }
        }
Exemple #3
0
        private static ThroughputTestResult RunUnitInpcObs()
        {
            var count  = 0;
            var person = new PersonOpt();

            using (person.ToObservable()
                   .Select(_ => Unit.Default)
                   .Subscribe(newAge => count++))
            {
                var result = new ThroughputTestResult(1, MessageCount);
                for (int i = 0; i < MessageCount; i++)
                {
                    person.Age = i;
                }
                result.Dispose();
                return(result);
            }
        }
        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);
        }
Exemple #5
0
        private static ThroughputTestResult RunOptInpcEvt()
        {
            var count  = 0;
            var person = new PersonOpt();

            PropertyChangedEventHandler handler = (s, e) =>
            {
                if (e.PropertyName == "Age")
                {
                    count = person.Age;
                }
            };

            person.PropertyChanged += handler;
            var result = new ThroughputTestResult(1, MessageCount);

            for (int i = 0; i < MessageCount; i++)
            {
                person.Age = i;
            }
            result.Dispose();
            person.PropertyChanged -= handler;
            return(result);
        }