从1D对象数组快速创建2D数组

时间:2014-12-25 20:00:10

标签: c# .net

我需要将我的类 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;
  }
}

1 个答案:

答案 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具有相同的值。否则你可能会遇到错误