5

重複の可能性:
C#:配列をコピーするより高速な方法はありますか?

次のような構造体の配列があります。

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...
}
4

1 に答える 1

0

の場合Buffer.BlockCopy、配列内の論理要素ではなく、bytes[] を byte[] にコピーします。

しかし、これは実際にはケースバイケースに依存します。

最初にコードをテストして確認してArray.Copyください。

于 2012-09-27T03:06:08.967 に答える