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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值