ソースを参照

4.x: Expand Subjects benchmark

akarnokd 7 年 前
コミット
c0d6a1bf9d

+ 64 - 0
Rx.NET/Source/benchmarks/Benchmarks.System.Reactive/SubjectBenchmark.cs

@@ -37,6 +37,70 @@ namespace Benchmarks.System.Reactive
             {
                 subj.OnNext(i);
             }
+            subj.OnCompleted();
+
+            return consumers;
+        }
+
+        [Benchmark]
+        public object AsyncSubjectPush()
+        {
+            var subj = new AsyncSubject<int>();
+            var consumers = new IDisposable[M];
+            var m = M;
+            for (var i = 0; i < m; i++)
+            {
+                consumers[i] = subj.Subscribe(v => Volatile.Write(ref _store, v));
+            }
+
+            var n = N;
+            for (var i = 0; i < n; i++)
+            {
+                subj.OnNext(i);
+            }
+            subj.OnCompleted();
+
+            return consumers;
+        }
+
+        [Benchmark]
+        public object BehaviorSubjectPush()
+        {
+            var subj = new BehaviorSubject<int>(-1);
+            var consumers = new IDisposable[M];
+            var m = M;
+            for (var i = 0; i < m; i++)
+            {
+                consumers[i] = subj.Subscribe(v => Volatile.Write(ref _store, v));
+            }
+
+            var n = N;
+            for (var i = 0; i < n; i++)
+            {
+                subj.OnNext(i);
+            }
+            subj.OnCompleted();
+
+            return consumers;
+        }
+
+        [Benchmark]
+        public object ReplaySubjectPush()
+        {
+            var subj = new ReplaySubject<int>();
+            var consumers = new IDisposable[M];
+            var m = M;
+            for (var i = 0; i < m; i++)
+            {
+                consumers[i] = subj.Subscribe(v => Volatile.Write(ref _store, v));
+            }
+
+            var n = N;
+            for (var i = 0; i < n; i++)
+            {
+                subj.OnNext(i);
+            }
+            subj.OnCompleted();
 
             return consumers;
         }