Я занимаюсь обработкой файлов Wave и считываю их с диска в массив байтов. Я хочу быстро скопировать порции из этого байтового массива в другой буфер для промежуточной обработки. В настоящее время я использую что-то вроде этого:
float[] fin;
byte[] buf;
//fill buf code omitted
for(int i=offset; i < size; i++){
fin[i-offset] = (float) buf[i];
}
Я чувствую, что это медленный метод, потому что в цикле for выполняется столько же вычислений, сколько в самом теле. Если бы была блочная копия, доступная на C# или каким-либо другим способом, я могу реализовать блочную копию, это было бы здорово.
Может быть, это не слишком медленно, но похоже, что для перемещения некоторых данных требуется много работы. Здесь «размер» находится между 2 ^ 10 и 2 ^ 14. Затем я передаю «плавник» библиотеке БПФ, так что это ни в коем случае не самая медленная часть кода, возможно, я ошибаюсь.
ОБНОВЛЕНИЕ РЕДАКТИРОВАТЬ: я понимаю, что микрооптимизация — это не то, на что кто-то должен тратить свое время, и я понимаю, что профилирование — лучший способ добиться ускорения в целом, но я знаю, что этот код находится на «горячем пути» и должен быть завершен в треть секунды на различных архитектурах конечного пользователя, чтобы минимизировать требования к нашей аппаратной системе. Несмотря на то, что я знаю, что следующий код БПФ займет гораздо больше времени, я ищу ускорения, где я могу их получить.
Array.Copy, конечно, выглядит красиво, я не знал об этом раньше, и я уже считаю этот Q&A успешным!