一尘不染

将float []转换为byte []的最快方法是什么?

c#

我想获得一个byte[]float[]尽可能快地,不通过整个数组循环(通过铸造,可能)。不安全的代码是可以的。谢谢!

我正在寻找一个比float数组长4倍的字节数组(字节数组的维数将是float数组的4倍,因为每个float都由4个字节组成)。我将其传递给BinaryWriter。

编辑
:向那些批评者尖叫“过早的优化”:在优化之前,我已经使用ANTS探查器对此进行了基准测试。由于文件具有直写式高速缓存,并且float数组的大小恰好与磁盘上的扇区大小匹配,因此速度有了显着提高。二进制编写器包装使用pinvoke‘d
win32 API 创建的文件句柄。之所以进行优化,是因为这减少了函数调用的次数。

而且,关于内存,此应用程序会创建使用大量内存的海量缓存。我可以分配一次字节缓冲区,然后重复使用多次-
在此特定实例中,双倍的内存使用量等于应用程序总体内存消耗中的舍入误差。

所以我想这里的教训是不要做过早的假设;)


阅读 1014

收藏
2020-05-19

共1个答案

一尘不染

如果您不希望发生任何转换,建议使用Buffer.BlockCopy()。

public static void BlockCopy(
    Array src,
    int srcOffset,
    Array dst,
    int dstOffset,
    int count
)

例如:

float[] floatArray = new float[1000];
byte[] byteArray = new byte[floatArray.Length * 4];

Buffer.BlockCopy(floatArray, 0, byteArray, 0, byteArray.Length);
2020-05-19