我需要将我的类 Frames 的以下1D数组转换为2D字节数组(我需要2D字节数组发送到GPU,我不能使用锯齿状数组,列表或其他可枚举)。
现在,我的转换非常缓慢而且很愚蠢:
public byte[,] allBytes()
{
byte[,] output = new byte[this.frameListSize, this.ySize * this.xSize];
for (int y = 0; y < this.frameListSize; y++)
{
byte[] bits = this.frameList[y].getBytes();
for (int x = 0; x < this.ySize * this.xSize; x++)
{
output[y, x] = bits[x];
}
}
return output;
}
定义frameList和Frame的片段如下:
public Frame[] frameList;
public class Frame
{
public byte[] bits;
public byte[] getBytes()
{
return bits;
}
}
答案 0 :(得分:2)
如果您使用的是.NET Framework 4或更高版本,则可以使用Parallel(首次加速)
public byte[,] allBytes()
{
int size1 = this.frameListSize;
int size2 = this.ySize * this.xSize;
byte[,] output = new byte[size1, size2];
Parallel.For(0, size1, (y) =>
{
byte[] bits = this.frameList[y].getBytes();
System.Buffer.BlockCopy(bits, 0, output, 0 + size2 * y, bits.Length);
});
return output;
}
Buffer.BlockCopy比普通复制快约20倍。确保bits.Length与size2具有相同的值。否则你可能会遇到错误