Ver código fonte

[PLinq] Replace calls to ToArray by ToList in query nodes to avoid the unnecessary copying and double array creation

Jérémie Laval 15 anos atrás
pai
commit
eca3c60701

+ 2 - 2
mcs/class/System.Core/System.Linq.Parallel.QueryNodes/QueryCastNode.cs

@@ -49,14 +49,14 @@ namespace System.Linq.Parallel.QueryNodes
 		{
 			return Parent.GetOrderedEnumerables (options)
 				.Select ((i) => i.Select ((e) => new KeyValuePair<long, object> (e.Key, (object)e.Value)))
-				.ToArray ();
+				.ToList ();
 		}
 		
 		internal override IList<IEnumerable<object>> GetEnumerables (QueryOptions options)
 		{
 			return Parent.GetEnumerables (options)
 				.Select ((i) => i.Cast<object> ())
-				.ToArray ();
+				.ToList ();
 		}
 	}
 }

+ 2 - 2
mcs/class/System.Core/System.Linq.Parallel.QueryNodes/QueryConcatNode.cs

@@ -45,7 +45,7 @@ namespace System.Linq.Parallel.QueryNodes
 
 			return Parent.GetEnumerables (options)
 				.Select ((f, i) => CombineEnumerables (f, second[i]))
-				.ToArray ();
+				.ToList ();
 		}
 
 		internal override IList<IEnumerable<KeyValuePair<long, TSource>>> GetOrderedEnumerables (QueryOptions options)
@@ -54,7 +54,7 @@ namespace System.Linq.Parallel.QueryNodes
 
 			return Parent.GetOrderedEnumerables (options)
 				.Select ((f, i) => CombineEnumerables (f, second[i]))
-				.ToArray ();
+				.ToList ();
 		}
 
 		internal override IEnumerable<TSource> GetSequential ()

+ 2 - 2
mcs/class/System.Core/System.Linq.Parallel.QueryNodes/QueryDefaultEmptyNode.cs

@@ -56,7 +56,7 @@ namespace System.Linq.Parallel.QueryNodes
 				.Select ((e) => GetEnumerableInternal<TSource> (e,
 				                                                evt,
 				                                                (s) => s))
-				.ToArray ();
+				.ToList ();
 		}
 		
 		internal override IList<IEnumerable<KeyValuePair<long, TSource>>> GetOrderedEnumerables (QueryOptions options)
@@ -68,7 +68,7 @@ namespace System.Linq.Parallel.QueryNodes
 				.Select ((e) => GetEnumerableInternal<KeyValuePair<long, TSource>> (e,
 				                                                                    evt,
 				                                                                    (s) => new KeyValuePair<long, TSource> (0, s)))
-				.ToArray ();
+				.ToList ();
 		}
 		
 		IEnumerable<TSecond> GetEnumerableInternal<TSecond> (IEnumerable<TSecond> source, 

+ 2 - 2
mcs/class/System.Core/System.Linq.Parallel.QueryNodes/QuerySelectManyNode.cs

@@ -71,7 +71,7 @@ namespace System.Linq.Parallel.QueryNodes
 				.Select ((i) => GetEnumerableInternal (i,
 				                                       (kv) => collectionSelectorIndexed (kv.Value, (int)kv.Key),
 				                                       (e, c) => resultSelector (e.Value, c)))
-				.ToArray ();
+				.ToList ();
 		}
 
 		internal override IList<IEnumerable<TResult>> GetEnumerablesNonIndexed (QueryOptions options)
@@ -80,7 +80,7 @@ namespace System.Linq.Parallel.QueryNodes
 				.Select ((i) => GetEnumerableInternal (i,
 				                                       collectionSelector,
 				                                       (e, c) => resultSelector (e, c)))
-				.ToArray ();
+				.ToList ();
 		}
 		
 		// This one is gonna be tricky

+ 3 - 3
mcs/class/System.Core/System.Linq.Parallel.QueryNodes/QuerySelectNode.cs

@@ -60,14 +60,14 @@ namespace System.Linq.Parallel.QueryNodes
 		{
 			return Parent.GetOrderedEnumerables (options)
 				.Select ((i) => i.Select ((e) => indexedSelector (e.Value, (int)e.Key)))
-				.ToArray ();
+				.ToList ();
 		}
 
 		internal override IList<IEnumerable<TResult>> GetEnumerablesNonIndexed (QueryOptions options)
 		{
 			return Parent.GetEnumerables (options)
 				.Select ((i) => i.Select (selector))
-				.ToArray ();
+				.ToList ();
 		}
 
 		internal override IList<IEnumerable<KeyValuePair<long, TResult>>> GetOrderedEnumerables (QueryOptions options)
@@ -77,7 +77,7 @@ namespace System.Linq.Parallel.QueryNodes
 				         IsIndexed ? 
 				         i.Select ((e) => new KeyValuePair<long, TResult> (e.Key, indexedSelector (e.Value, (int)e.Key))) :
 				         i.Select ((e) => new KeyValuePair<long, TResult> (e.Key, selector (e.Value))))
-				.ToArray ();
+				.ToList ();
 		}
 	}
 }

+ 2 - 2
mcs/class/System.Core/System.Linq.Parallel.QueryNodes/QuerySetNode.cs

@@ -76,7 +76,7 @@ namespace System.Linq.Parallel.QueryNodes
 
 			return first
 				.Select ((f, i) => GetEnumerable<TSource> (f, second[i], checker, (e) => e))
-				.ToArray ();
+				.ToList ();
 		}
 
 		internal override IList<IEnumerable<KeyValuePair<long, TSource>>> GetOrderedEnumerables (QueryOptions options)
@@ -89,7 +89,7 @@ namespace System.Linq.Parallel.QueryNodes
 
 			return first
 				.Select ((f, i) => GetEnumerable<KeyValuePair<long, TSource>> (f, second[i], checker, (e) => e.Value))
-				.ToArray ();
+				.ToList ();
 		}
 				
 		void InitConcurrentSkipList<TExtract> (ConcurrentSkipList<TSource> checker,

+ 3 - 3
mcs/class/System.Core/System.Linq.Parallel.QueryNodes/QueryWhereNode.cs

@@ -64,14 +64,14 @@ namespace System.Linq.Parallel.QueryNodes
 		{
 			return Parent.GetOrderedEnumerables (options)
 				.Select ((i) => i.Where ((e) => indexedPredicate (e.Value, (int)e.Key)).Select ((e) => e.Value))
-				.ToArray ();
+				.ToList ();
 		}
 
 		internal override IList<IEnumerable<TSource>> GetEnumerablesNonIndexed (QueryOptions options)
 		{
 			return Parent.GetEnumerables (options)
 				.Select ((i) => i.Where (predicate))
-				.ToArray ();
+				.ToList ();
 		}
 
 		internal override IList<IEnumerable<KeyValuePair<long, TSource>>> GetOrderedEnumerables (QueryOptions options)
@@ -99,7 +99,7 @@ namespace System.Linq.Parallel.QueryNodes
 
 			return sources
 				.Select ((s, i) => GetEnumerator (s, barrier, store, i))
-				.ToArray ();
+				.ToList ();
 		}
 
 		static int ArraySortMethod (Tuple<TSource, long, bool> lhs, Tuple<TSource, long, bool> rhs)

+ 2 - 2
mcs/class/System.Core/System.Linq.Parallel.QueryNodes/QueryZipNode.cs

@@ -61,7 +61,7 @@ namespace System.Linq.Parallel.QueryNodes
 
 			return first
 				.Select ((f, i) => GetEnumerable (f, second[i]))
-				.ToArray ();
+				.ToList ();
 		}
 
 		IEnumerable<TResult> GetEnumerable (IEnumerable<TFirst> first, IEnumerable<TSecond> second)
@@ -100,7 +100,7 @@ namespace System.Linq.Parallel.QueryNodes
 
 			return first
 				.Select ((f, i) => GetEnumerable (f, second[i], i , store1, store2, barrier))
-				.ToArray ();
+				.ToList ();
 		}
 
 		IEnumerable<KeyValuePair<long, TResult>> GetEnumerable (IEnumerable<KeyValuePair<long, TFirst>> first,