Я занимаюсь обработкой файлов 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. Затем я передаю «плавник» библиотеке FFT, так что это ни в коем случае не самая медленная часть кода, возможно, я лаю не на том дереве.
РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ:
Я понимаю, что микрооптимизация - это не то место, где кто-то должен тратить свое время, и я понимаю, что профилирование - это лучший способ добиться ускорения в целом, но я знаю, что этот код находится на «горячем пути» и должен быть выполнен менее чем за треть второй по изменению архитектуры конечных пользователей, чтобы минимизировать требования к аппаратному обеспечению. Несмотря на то, что я знаю, что следующий FFT-код будет занимать гораздо больше времени, я ищу ускорения, где я могу их получить.
Array.Copy, конечно, выглядит красиво, я не знал об этом раньше, и считаю этот вопрос уже успешным!