C# 从一维对象数组快速创建二维数组

C# 从一维对象数组快速创建二维数组,c#,.net,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++) { b

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

如果使用.NET Framework 4或更高版本,则可以使用(首次加速)


大约是普通复制速度的20倍。确保bits.Length的值与size2的值相同。否则,您可能会遇到错误

是的,我使用的是.net 4.5.2,但我认为CPU的使用正在损害我的视频帧抓取器,而视频帧抓取器正是传输所有这些字节的设备(当我与数据获取并行执行此操作时,会出现缓冲区溢出)。生成的2D字节数组是您引用的MSDN文档中的[211024x1024]:ArgumentException当前数组没有精确的一维。很抱歉,这是我的错。然后你必须使用Block.Copy(在我的答案中更改了),这是一个巨大的改进。谢谢
public Frame[] frameList;

public class Frame
{

  public byte[] bits;

  public byte[] getBytes()
  {
    return bits;
  }
}
    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;
    }