Je suis en train de manipuler des fichiers Wave et de les faire lire à partir d'un disque dans un tableau d'octets. Je veux copier rapidement des parties de ce tableau d'octets dans un autre tampon pour le traitement intermédiaire. Actuellement, j'utiliser quelque chose comme ceci:Quel est le moyen le plus rapide de copier mon tableau?
float[] fin;
byte[] buf;
//fill buf code omitted
for(int i=offset; i < size; i++){
fin[i-offset] = (float) buf[i];
}
Je pense que cela est une méthode lente, parce qu'il ya autant de calcul en cours dans la boucle conditionnelle et l'incrément comme il est plus dans le corps même. S'il y avait une copie de bloc disponible en C# ou d'une autre manière, je pourrais mettre en place une copie de bloc, ce serait génial.
Peut-être que ce n'est pas trop lent, mais il semble que beaucoup de travail pour déplacer certaines données. Ici, la "taille" est comprise entre 2^10 et 2^14. Je passe ensuite le "fin" à une bibliothèque FFT, donc ce n'est en aucun cas la partie la plus lente du code, peut-être que j'aboie le mauvais arbre. Je me rends compte que les micro optimisations ne sont pas là où quelqu'un devrait passer son temps, et je réalise que le profilage est une meilleure façon d'atteindre des accélérations dans l'ensemble, mais je sais que ce code est dans un «chemin chaud» et doit être achevée en moins d'un tiers de seconde sur différentes architectures de l'utilisateur final afin de minimiser les exigences de notre système matériel. Même si je sais que le code FFT suivant prendra beaucoup plus de temps, je cherche des accélérations où je peux les obtenir.
Array.Copie semble très bien, je ne savais pas à ce sujet avant, et je considère que ce Q & A un succès déjà!
Oui, sous MS.NET Framework, je ne pense pas que nous devrions piquer des bits sous un flotteur :) – Karl