[C.C++] C#复制数组的两种方式及效率比较

1954 0
Honkers 2022-11-5 08:53:28 | 显示全部楼层 |阅读模式
如何高效地进行数组复制?
如果把一个变量值复制给另外一个数组变量,那么2个变量指向托管堆上同一个引用。
如果想在托管堆上创建另外的一份数组实例,通常使用Array.Copy方法。
  1. class Program
  2. {
  3.     static void Main(string[] args)
  4.     {
  5.         int[] a = {1, 3, 6};
  6.         int[] b =new int[a.Length];
  7.         Array.Copy(a,0,b,0,a.Length);
  8.         MyArrCopy myArrCopy = new MyArrCopy();
  9.         myArrCopy.Display(a);
  10.         Console.ReadKey();
  11.     }
  12. }
  13. public class MyArrCopy
  14. {
  15.     public void Display(int[] arr)
  16.     {
  17.         for (int i = 0; i < arr.Length; i++)
  18.         {
  19.             if (i != 0)
  20.             {
  21.                 Console.Write(",");
  22.             }
  23.             Console.Write(arr[i]);
  24.         }
  25.     }
  26. }
复制代码
在数据量大的情况下,使用Buffer.BlockCopy方法将会拥有更高的复制效率。
分别测试使用Buffer.BlockCopy和Array.Copy的区别。
  1. public class CopyTest
  2. {
  3.     private int[] _myArr;//数组源
  4.     private int[] _blockArr=new int[10000];//使用 Buffer.BlockCopy的目标数组
  5.     private int[] _copyArr=new int[10000];//使用Array.Copy的目标数组
  6.     public CopyTest(int[] myArr)
  7.     {
  8.         _myArr = myArr;
  9.     }
  10.     public void TestBlockCopy()
  11.     {
  12.         Stopwatch sw = new Stopwatch();
  13.         sw.Start();
  14.         Buffer.BlockCopy(_myArr, 0,blockArr,0,_myArr.Length);
  15.         sw.Stop();
  16.         Console.WriteLine("使用Buffer.BlockCopy方法:" + sw.ElapsedTicks);
  17.     }
  18.     public void TestNormalCopy()
  19.     {
  20.         Stopwatch sw = new Stopwatch();
  21.         sw.Start();
  22.         Array.Copy(_myArr, 0, _copyArr,0, _myArr.Length);
  23.         sw.Start();
  24.         Console.WriteLine("使用Array.Copy方法:" + sw.ElapsedTicks);
  25.     }
  26. }
复制代码
客户端。
  1. int[] a = new int[10000];
  2. for (int i = 0; i < 10000; i++)
  3. {
  4.     a[i] = i;
  5. }
  6. var copyTest = new CopyTest(a);
  7. copyTest.TestBlockCopy();
  8. copyTest.TestNormalCopy();
  9. Console.ReadKey();
复制代码


以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对中国红客联盟的支持。如果你想了解更多相关内容请查看下面相关链接

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4008
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行