我正在处理一些Wave文件,将其从磁盘读入一个字节数组中。我希望能够快速地将该字节数组的部分内容复制到另一个缓冲区进行中间处理。目前我使用的类似以下的方法:
float[] fin;
byte[] buf;
//fill buf code omitted
for(int i=offset; i < size; i++){
fin[i-offset] = (float) buf[i];
}
我认为这是一种缓慢的方法,因为在for循环条件和增量中进行的计算与实际操作中进行的计算一样多。如果C#中有块复制可用或者其他实现块复制的方式,那就太好了。
也许这并不太慢,但它看起来需要大量的工作来移动一些数据。这里的“size”在2^10到2^14之间。然后我将“fin”交给FFT库处理,因此这绝不是代码中最慢的部分,也许我走错了路。
编辑更新: 我意识到微小的优化不是一个人应该花费时间的地方,我知道性能分析是实现整体加速的更好方式,但我知道这段代码在“热路径”中,并且必须在各种终端用户架构下在不到三分之一秒内完成,以最小化我们的硬件系统需求。即使我知道以下FFT代码将耗费更多时间,我仍在寻找可以提高速度的地方。
Array.Copy看起来很不错,我以前不知道这个,我认为这个Q&A已经成功了!