5 votes

Comment Array.ForEach() se compare-t-il à la boucle for standard en C# ?

Je me languis de l'époque où, en tant que programmeur C, je savais taper :

memset( byte_array, '0xFF' );

et obtenir un tableau d'octets rempli de caractères 'FF'. J'ai donc cherché une solution de remplacement :

for (int i=0; i < byteArray.Length; i++)
{
    byteArray[i] = 0xFF;
}

Dernièrement, j'ai utilisé certaines des nouvelles fonctionnalités de C# et j'ai utilisé cette approche à la place :

Array.ForEach<byte>(byteArray, b => b = 0xFF);

Certes, la seconde approche semble plus propre et plus agréable à l'œil, mais quelles sont les performances par rapport à la première approche ? Est-ce que j'introduis des frais généraux inutiles en utilisant Linq et les génériques ?

Merci, Dave

0voto

Spencer Ruport Points 24589

Je ne pense pas que les génériques puissent jamais nuire aux performances. Ils sont principalement traités au moment de la compilation et leur objectif général est de supprimer la nécessité de faire un casting entre l'objet et le type souhaité, ce qui aura au pire un effet négligeable et au mieux un gain de performance mesurable.

En ce qui concerne LINQ, je ne suis pas sûr des effets qu'il peut avoir sur les performances.

En fin de compte, cependant, les initialisations sont une tâche tellement mineure que les effets sur les performances ne seront pas dignes de votre attention.

0voto

Morten Mertner Points 5786

J'ai constaté que Array.ForEach est nettement plus lent qu'une boucle for ou foreach si elle se trouve sur un chemin d'exécution critique. Cependant, à moins que vous ne soyez un développeur de frameworks ou de bibliothèques ou que vous ayez besoin d'initialiser des millions de tableaux, je ne m'inquiéterais pas du tout des performances. Il est très probable que vous puissiez gagner beaucoup plus en optimisant ailleurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X