zoukankan      html  css  js  c++  java
  • 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

    总结

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

  • 相关阅读:
    shell 字符串替换
    shell 拆分字符串成数组 放入数组
    shell 换行输出变量 换行
    Linux shell修改xml文件
    Spark 实现共同好友
    Hive 开启 service2 服务
    hive 求相互是好友.
    Linux 查看外网ip
    Termux下开启kex远程桌面
    Termux开启ssh服务
  • 原文地址:https://www.cnblogs.com/ligiggy/p/14585298.html
Copyright © 2011-2022 走看看