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); }
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); } }
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); }
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); }