c#数组的赋值与拷贝

来自链接 https://www.cnblogs.com/makesense/p/4461016.html

int[] array = new int[10];
int[] copy = new int[array.Length];
Array.Copy(array, copy, array.Length);

需要深入研究的可以参考链接 https://www.cnblogs.com/chihirosan/p/5163638.html,有函数拷贝的效率比较.

两个效率较快的函数:

1.Array.Copy的方法,原生的数组复制方法【没有了Copy,可以处理任意值类型】,处理2000000*100字节620.042ms,

public static T2[] Arr2Arr3<T1, T2>(T1[] from)
    where T1 : struct
    where T2 : struct
{
    int byteNum = from.Length * from[0].Sizeof();
    T2 testByte = new T2();
    T2[] dTo = new T2[byteNum / testByte.Sizeof()];

    Array.Copy(from, dTo, dTo.Length);
    return dTo;
}

2.通过Buffer.BlockCopy拷贝数组,速度最快,感觉类似于c++的memcpy【没有了Copy,可以处理任意值类型】,处理2000000*100字节300.0329ms.

public static T2[] Arr2Arr4<T1, T2>(T1[] from)
    where T1 : struct
    where T2 : struct
{
    int byteNum = from.Length * from[0].Sizeof();
    T2 testByte = new T2();
    T2[] dTo = new T2[byteNum / testByte.Sizeof()];

    Buffer.BlockCopy(from, 0, dTo, 0, byteNum);

    return dTo;
}

上面两个函数Arr2Arr3与Arr2Arr4为泛型约束代码,目前不清楚如何调用,这里仅记下Array.Copy函数与Buffer.BlockCopy两个函数.

下面为测试程序伪代码,可以用Array.Copy函数与Buffer.BlockCopy函数分别测试.

byte[] from = new byte[100];
from[0] = 1;
from[1] = 1;

var last = DateTime.Now;
for (int i = 0; i < 2000000; i++)
{
    。。。
}
Console.WriteLine((DateTime.Now- last).TotalMilliseconds);

猜你喜欢

转载自blog.csdn.net/dd_zhouqian/article/details/89510071