Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Foreach vs AddRange
Message
De
12/08/2009 08:38:58
Cetin Basoz
Engineerica Inc.
Izmir, Turquie
 
 
À
12/08/2009 01:35:03
Information générale
Forum:
ASP.NET
Catégorie:
Autre
Versions des environnements
Environment:
C# 3.0
Divers
Thread ID:
01417359
Message ID:
01417505
Vues:
55
>Adding an extension method ( say AddCollection) is a bad idea since it accepts an argument of IEnumerable(T).
>
>using items.Count() is slow - I guess it uses a foreach loop to count
>
>
>// don't do this at home
>
>public static void AddCollection<T>(this List<T> list, IEnumerable<T> items)
>		{
>
>			if (items.Count() <= Tuning.AddRangeMinimumItems) // 128
>			{
>				foreach (T item in items)
>					list.Add(item);
>			}
>			else
>			{
>				list.AddRange(items);
>			}
>		}
>
>
>An extension method that takes a whole array is a better idea - since array.Length is faster

Gregory,
Sorry I didn't read the whole thread to see your purpose and solutions so far, could you use and try Linq Concat()? ie:
	public static void AddCollection<T>(this List<T> list, IEnumerable<T> items)
	{
			list.Concat( items );
	}
Update: I made a short test with this using your original test and probably I am doing something wrong, results are unbelievably fast:

00:00:05.5402003 // UseAddRange
00:00:01.9798588 // UseForeach
00:00:00.3055594 // UseConcat

Thinking F# power and sequence processing behind Linq that result might be perfectly right. Here is my UseConcat BTW:
       static void UseConcat()
        {
            int[] buf = new int[Size];
            List<int> list = new List<int>();
            for (int i = nTimes; --i != 0; )
            {
                list.AddCollection(buf);
                list.Clear();
            }

        }
Cetin
Çetin Basöz

The way to Go
Flutter - For mobile, web and desktop.
World's most advanced open source relational database.
.Net for foxheads - Blog (main)
FoxSharp - Blog (mirror)
Welcome to FoxyClasses

LinqPad - C#,VB,F#,SQL,eSQL ... scratchpad
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform