Browse Source

Use Array.Empty<T>() to save allocation of an empty array where appropriate.

Daniel C. Weber 7 years ago
parent
commit
9ed6262856

+ 1 - 1
Rx.NET/Source/src/System.Reactive/Disposables/CompositeDisposable.cs

@@ -381,7 +381,7 @@ namespace System.Reactive.Disposables
         /// method to avoid allocation on disposed or empty composites.
         /// </summary>
         private static readonly CompositeEnumerator EmptyEnumerator =
-            new CompositeEnumerator(new IDisposable[0]);
+            new CompositeEnumerator(Array.Empty<IDisposable>());
 
         /// <summary>
         /// An enumerator for an array of disposables.

+ 1 - 1
Rx.NET/Source/src/System.Reactive/Internal/ImmutableList.cs

@@ -12,7 +12,7 @@ namespace System.Reactive
 
         private ImmutableList()
         {
-            _data = new T[0];
+            _data = Array.Empty<T>();
         }
 
         public ImmutableList(T[] data)

+ 2 - 4
Rx.NET/Source/src/System.Reactive/Linq/Observable/Zip.cs

@@ -566,8 +566,6 @@ namespace System.Reactive.Linq.ObservableImpl
             private bool[] _isDone;
             private IDisposable[] _subscriptions;
 
-            private static readonly IDisposable[] Disposed = new IDisposable[0];
-
             public void Run(IEnumerable<IObservable<TSource>> sources)
             {
                 var srcs = sources.ToArray();
@@ -598,8 +596,8 @@ namespace System.Reactive.Linq.ObservableImpl
             {
                 if (disposing)
                 {
-                    var subscriptions = Interlocked.Exchange(ref _subscriptions, Disposed);
-                    if (subscriptions != null)
+                    var subscriptions = Interlocked.Exchange(ref _subscriptions, Array.Empty<IDisposable>());
+                    if (subscriptions != null && subscriptions != Array.Empty<IDisposable>())
                     {
                         for (var i = 0; i < subscriptions.Length; i++)
                         {

+ 2 - 7
Rx.NET/Source/src/System.Reactive/Subjects/AsyncSubject.cs

@@ -22,11 +22,6 @@ namespace System.Reactive.Subjects
         private bool _hasValue;
         private Exception _exception;
 
-        /// <summary>
-        /// A pre-allocated empty array for the no-observers state.
-        /// </summary>
-        private static readonly AsyncSubjectDisposable[] Empty = new AsyncSubjectDisposable[0];
-
         /// <summary>
         /// A pre-allocated empty array indicating the AsyncSubject has terminated
         /// </summary>
@@ -46,7 +41,7 @@ namespace System.Reactive.Subjects
         /// </summary>
         public AsyncSubject()
         {
-            _observers = Empty;
+            _observers = Array.Empty<AsyncSubjectDisposable>();
         }
 
         #endregion
@@ -282,7 +277,7 @@ namespace System.Reactive.Subjects
                 var b = default(AsyncSubjectDisposable[]);
                 if (n == 1)
                 {
-                    b = Empty;
+                    b = Array.Empty<AsyncSubjectDisposable>();
                 }
                 else
                 {

+ 2 - 3
Rx.NET/Source/src/System.Reactive/Subjects/Subject.cs

@@ -18,7 +18,6 @@ namespace System.Reactive.Subjects
 
         private SubjectDisposable[] _observers;
         private Exception _exception;
-        private static readonly SubjectDisposable[] Empty = new SubjectDisposable[0];
         private static readonly SubjectDisposable[] Terminated = new SubjectDisposable[0];
         private static readonly SubjectDisposable[] Disposed = new SubjectDisposable[0];
 
@@ -31,7 +30,7 @@ namespace System.Reactive.Subjects
         /// </summary>
         public Subject()
         {
-            Volatile.Write(ref _observers, Empty);
+            Volatile.Write(ref _observers, Array.Empty<SubjectDisposable>());
         }
 
         #endregion
@@ -229,7 +228,7 @@ namespace System.Reactive.Subjects
                 var b = default(SubjectDisposable[]);
                 if (n == 1)
                 {
-                    b = Empty;
+                    b = Array.Empty<SubjectDisposable>();
                 }
                 else
                 {