我想获得一个byte[]从float[]尽可能快地,不通过整个数组循环(通过铸造,可能)。不安全的代码是可以的。谢谢!
byte[]
float[]
我正在寻找一个比float数组长4倍的字节数组(字节数组的维数将是float数组的4倍,因为每个float都由4个字节组成)。我将其传递给BinaryWriter。
编辑 :向那些批评者尖叫“过早的优化”:在优化之前,我已经使用ANTS探查器对此进行了基准测试。由于文件具有直写式高速缓存,并且float数组的大小恰好与磁盘上的扇区大小匹配,因此速度有了显着提高。二进制编写器包装使用pinvoke‘d win32 API 创建的文件句柄。之所以进行优化,是因为这减少了函数调用的次数。
pinvoke
而且,关于内存,此应用程序会创建使用大量内存的海量缓存。我可以分配一次字节缓冲区,然后重复使用多次- 在此特定实例中,双倍的内存使用量等于应用程序总体内存消耗中的舍入误差。
所以我想这里的教训是不要做过早的假设;)
如果您不希望发生任何转换,建议使用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);