[corlib] Optimize one string Join<T> overload. Fixes #16647
authorMarek Safar <marek.safar@gmail.com>
Fri, 6 Dec 2013 18:30:48 +0000 (19:30 +0100)
committerMarek Safar <marek.safar@gmail.com>
Fri, 6 Dec 2013 18:32:46 +0000 (19:32 +0100)
mcs/class/corlib/System/String.cs

index d30735f9bdbad34a0239933209a4997f4609a14d..00055dc07e2602a8f0de725d2f0109e39e61081b 100644 (file)
@@ -2743,11 +2743,13 @@ namespace System
                        if (values == null)
                                throw new ArgumentNullException ("values");
                        
-                       var stringList = new List<string> ();
-                       foreach (var v in values)
-                               stringList.Add (v.ToString ());
+                       var stringList = values as IList<T> ?? new List<T> (values);
+                       var strCopy = new string [stringList.Count];
+                       int i = 0;
+                       foreach (var v in stringList)
+                               strCopy [i++] = v.ToString ();
 
-                       return JoinUnchecked (separator, stringList.ToArray (), 0, stringList.Count);
+                       return JoinUnchecked (separator, strCopy, 0, strCopy.Length);
                }
 
                public static bool IsNullOrWhiteSpace (string value)