来自链接 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);