瀏覽代碼

Optimizing layouts of Aggregate.

Bart De Smet 8 年之前
父節點
當前提交
81a05e57d9
共有 1 個文件被更改,包括 8 次插入6 次删除
  1. 8 6
      Rx.NET/Source/src/System.Reactive/Linq/Observable/Aggregate.cs

+ 8 - 6
Rx.NET/Source/src/System.Reactive/Linq/Observable/Aggregate.cs

@@ -164,23 +164,25 @@ namespace System.Reactive.Linq.ObservableImpl
 
         private sealed class _ : Sink<TResult>, IObserver<TSource>
         {
-            // CONSIDER: This sink has a parent reference that can be considered for removal.
+            private readonly Func<TAccumulate, TSource, TAccumulate> _accumulator;
+            private readonly Func<TAccumulate, TResult> _resultSelector;
 
-            private readonly Aggregate<TSource, TAccumulate, TResult> _parent;
             private TAccumulate _accumulation;
 
             public _(Aggregate<TSource, TAccumulate, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
                 : base(observer, cancel)
             {
-                _parent = parent;
-                _accumulation = _parent._seed;
+                _accumulator = parent._accumulator;
+                _resultSelector = parent._resultSelector;
+
+                _accumulation = parent._seed;
             }
 
             public void OnNext(TSource value)
             {
                 try
                 {
-                    _accumulation = _parent._accumulator(_accumulation, value);
+                    _accumulation = _accumulator(_accumulation, value);
                 }
                 catch (Exception exception)
                 {
@@ -200,7 +202,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 var result = default(TResult);
                 try
                 {
-                    result = _parent._resultSelector(_accumulation);
+                    result = _resultSelector(_accumulation);
                 }
                 catch (Exception exception)
                 {