C#:如何有效地复制大量的结构?

时间:2012-09-27 02:34:51

标签: c# .net

  

可能重复:
  C#: Any faster way of copying arrays?

我有一系列这样的结构:

struct S
{
    public long A;
    public long B;
}

...
S[] s1 = new S[1000000];
...
S[] = new S[s1.Length];
// Need to create a copy here.

我可以使用不安全模式并将结构的源数组复制到字节数组,然后从字节数组复制到结构的目标数组。但这意味着我将不得不分配一个巨大的中间字节数组。有办法避免这种情况吗?有可能以某种方式将目标数组表示为字节数组并直接复制到那里吗?

unsafe
{
    int size = Marshal.SizeOf(s0[0]) * s0.Length;
    byte[] tmp = new byte[size];
    fixed (var tmpSrc = &s0[0])
    {
        IntPtr src = (IntPtr)tmpSrc;
        Marchal.Copy(tmpSrc, 0, tmp, 0, size);
    }

    // The same way copy to destination s1 array...
}

2 个答案:

答案 0 :(得分:0)

Buffer.BlockCopy的情况下,它将bytes []复制到byte []而不是数组中的逻辑元素。

但这实际上取决于具体情况。

请先使用Array.Copy测试您的代码并查看。

答案 1 :(得分:-1)

复制的替代方法:最快的方法是不复制任何东西。

如果您可以保证您感兴趣的阵列部分没有变化,您可以提供一些替代界面(即IEnumerable<S>)来阅读这些部分。

如果要复制以创建另一个大型数组 - 请考虑为第二部分创建新数组,并通过某个接口将2个或更多数组作为单个实体公开。