• C# 数组 深拷贝 和 数组传参


    前言

    C#中引用类型无法使用const,因此传参的时候使用引用类型,一定要注意是否会改变其值。下面介绍几种 数组的 深拷贝方法。

    前提

    下面的测试代码有一些前提,

    • sw为Stopwatch
    • nForTimes在这里为10000000

    1.Array.Copy(sourceArray, destArray, length)

    int[] nArray = new int[4] { 11, 22, 33, 44 };
    
    int[] copyArray = new int[4];
    
    sw.Start();
    for (int i = 0; i < nForTimes; i++)
    {
    	Array.Copy(nArray, copyArray, 4);
    }
    
    sw.Stop();
    
    decimal dCopy = sw.ElapsedTicks / (decimal)Stopwatch.Frequency;
    
    Console.WriteLine(dCopy);
    
    • copy方法运行时间:0.3301541

    2.Array.Clone()

    int[] cloneArray = new int[4];
    
    sw.Restart();
    
    for (int i = 0; i < nForTimes; i++)
    {
    	cloneArray = (int[])nArray.Clone();
    }
    
    sw.Stop();
    
    decimal dClone = sw.ElapsedTicks / (decimal)Stopwatch.Frequency;
    
    Console.WriteLine(dClone);
    
    • clone方法运行时间:0.8257813

      因为有明显的强制类型转换,所以耗时较长

    3.Array.CopyTo

    int[] copytoArray = new int[4];
    
    sw.Restart();
    
    for (int i = 0; i < nForTimes; i++)
    {
    	nArray.CopyTo(copytoArray, 0);
    }
    
    sw.Stop();
    
    decimal dCopyTo = sw.ElapsedTicks / (decimal)Stopwatch.Frequency;
    
    Console.WriteLine(dCopyTo);
    
    • copyto运行时间:0.3313199

    4.直接赋值

    int[] nDefineArray = new int[4];
    
    sw.Restart();
    
    for (int i = 0; i < nForTimes; i++)
    {
        for (int j = 0; j < 4; j++)
        {
        	nDefineArray[j] = nArray[j];
        }
    }
    
    sw.Stop();
    
    decimal dDefine = sw.ElapsedTicks / (decimal)Stopwatch.Frequency;
    
    Console.WriteLine(dDefine);
    
    • 直接赋值运行时间:0.0785752

    总结

    直接赋值的方式性能明显强于其他的语法糖。

  • 相关阅读:
    iframe框架
    HTML 中 id与name 区别
    使用display:inline-block产生间隙
    html5新增语义化标签
    子选择器与后代选择器的区别
    各种居中问题
    腾讯 地图 机器学习岗 春招实习123面(猝)
    腾讯 微信春招nlp实习生一面二面(猝)
    264. Ugly Number II(丑数 剑指offer 34)
    263. Ugly Number(判断是否是丑数 剑指offer34)
  • 原文地址:https://www.cnblogs.com/ligiggy/p/14585298.html
Copyright © 2020-2023  润新知