Ajouter deux ou plusieurs tableaux d'octets en C#

Est-il un des meilleurs (voir ci-dessous) de manière à ajouter deux tableaux d'octets en C#?

Prétendant j'ai un contrôle complet, je peux faire le premier tableau d'octets suffisamment grand pour contenir le deuxième tableau d'octets à la fin et l'utilisation de la Tableau.CopyTo fonction. Ou je peut faire une boucle sur chacun des octets et de réaliser une cession.

Sont t-il de meilleures façons de faire? Je ne peux pas imaginer faire quelque chose comme la conversion de l'tableaux d'octets de la chaîne et de les rejoindre et de les convertir en retour serait mieux que ce soit la méthode ci-dessus.

En termes de meilleure/mieux (dans l'ordre):

  1. Plus rapide
  2. Moins de consommation de RAM

Une contrainte, c'est que je dois travailler dans le .NET framework 2.0.

Les deux choix sont recommandés MemoryStream et BlockCopy. J'ai l'exécution d'un simple test de vitesse de 10 000 000 de boucles 3 fois et a obtenu les résultats suivants:

Moyenne des 3 essais de 10 000 000 de boucles en millisecondes:

  • BlockCopy Temps: 1154, avec une gamme de 13 millisecondes
  • MemoryStream GetBuffer Temps: 1470, avec une gamme de 14 millisecondes
  • MemoryStream ToArray Temps: 1895, avec une gamme de 3 millisecondes
  • CopyTo Temps: 2079, avec une gamme de 19 millisecondes
  • Octet-par-octet Temps: 2203, avec une portée de 10 millisecondes

Résultats de la Liste<byte> AddRange plus de 10 millions de boucles:
Liste<byte> Temps: 16694

Relative de la Consommation de RAM (1 est la base, plus élevé est le pire):

  • Octet-par-octet: 1
  • BlockCopy: 1
  • Copie À: 1
  • MemoryStream GetBuffer: 2.3
  • MemoryStream ToArray: 3.3
  • Liste<byte>: 4.2

Le test montre qu'en général, sauf si vous faites beaucoup de l'octet copies [qui je suis], à la recherche à l'octet copie ne vaut pas l'accent [par exemple, 10 millions de pistes ce qui donne une différence de plus de 1.1 secondes].

InformationsquelleAutor torial | 2009-05-21