C# Array.Copy()方法与Buffer.BlockCopy()效率对比

测试类:

public class CopySpeedTest
{
	//3M空间
    private byte[] Bytes = new byte[3 * 1024 * 1024];
    private int Len { get; set; }

    public CopySpeedTest()
    {
        //使用一个图片文件的流
        using (var fs = new FileStream(@"D:\temp\pic.jpg", FileMode.Open)) 
        {
           Len = fs.Read(Bytes, 0, (int)fs.Length);
        }
    }

    public void ArrayCopy()
    {
        byte[] arr = new byte[Len + 100];
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();
        //循环50000次
        for (int i = 0; i < 50000; i++)
        {
        	//复制,设置偏移为30
            Array.Copy(Bytes, 0, arr, 30, Len);
        }
        stopwatch.Stop();
        Console.WriteLine($"ArryCopy:{stopwatch.ElapsedMilliseconds}");
    }

    public void BlockBuffer()
    {
        byte[] arr = new byte[Len + 100];
        Stopwatch stopwatch = new Stopwatch();
        //循环50000次
        stopwatch.Start();
        for (int i = 0; i < 50000; i++)
        {
       		//复制,设置偏移为30
            Buffer.BlockCopy(Bytes, 0, arr, 30, Len);
        }
        stopwatch.Stop();
        Console.WriteLine($"BlockBuffer:{stopwatch.ElapsedMilliseconds}");
    }
}

主程序:

static void Main(string[] args)
{
    int cnt = 1;
    while (true)
    {
        Console.WriteLine($"+++++++++++第{cnt++}次+++++++++++");
        CopySpeedTest test = new CopySpeedTest();
        List<Task> tasks = new List<Task>();

		//并行计算
        tasks.Add(Task.Run(() => { test.BlockBuffer(); }));
        tasks.Add(Task.Run(() => { test.ArrayCopy(); }));
        Task.WaitAll(tasks.ToArray());
        
        Console.WriteLine();
        Console.ReadKey();
    }
}   

结果如下,仅供参考
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值