如何高效地进行数组复制?

如果把一个变量值复制给另外一个数组变量,那么2个变量指向托管堆上同一个引用。

如果想在托管堆上创建另外的一份数组实例,通常使用Array.Copy方法。

class Program
{
static void Main(string[] args)
{
int[] a = {1, 3, 6};
int[] b =new int[a.Length];
Array.Copy(a,0,b,0,a.Length);MyArrCopy myArrCopy = new MyArrCopy();
myArrCopy.Display(a);
Console.ReadKey();
}
}public class MyArrCopy
{
public void Display(int[] arr)
{
for (int i = 0; i < arr.Length; i++)
{
if (i != 0)
{
Console.Write(",");
}
Console.Write(arr[i]);
}
}
}

在数据量大的情况下,使用Buffer.BlockCopy方法将会拥有更高的复制效率。

分别测试使用Buffer.BlockCopy和Array.Copy的区别。

public class CopyTest
{
private int[] _myArr;//数组源
private int[] _blockArr=new int[10000];//使用 Buffer.BlockCopy的目标数组
private int[] _copyArr=new int[10000];//使用Array.Copy的目标数组public CopyTest(int[] myArr)
{
_myArr = myArr;
}public void TestBlockCopy()
{
Stopwatch sw = new Stopwatch();
sw.Start();
Buffer.BlockCopy(_myArr, 0,_blockArr,0,_myArr.Length);
sw.Stop();
Console.WriteLine("使用Buffer.BlockCopy方法:" + sw.ElapsedTicks);
}public void TestNormalCopy()
{
Stopwatch sw = new Stopwatch();
sw.Start();
Array.Copy(_myArr, 0, _copyArr,0, _myArr.Length);
sw.Start();
Console.WriteLine("使用Array.Copy方法:" + sw.ElapsedTicks);
}
}

客户端。

int[] a = new int[10000];
for (int i = 0; i < 10000; i++)
{
a[i] = i;
}var copyTest = new CopyTest(a);
copyTest.TestBlockCopy();
copyTest.TestNormalCopy();Console.ReadKey();
}

C#复制数组的两种方式,以及效率比较相关推荐

  1. java 深克隆_Java实现深克隆的两种方式

    序列化和依次克隆各个可变的引用类型都可以实现深克隆,但是序列化的效率并不理想 下面是两种实现深克隆的实例,并且测试类对两种方法进行了对比: 1.重写clone方法使用父类中的clone()方法实现深克 ...

  2. springMVC两种方式实现多文件上传及效率比较

    springMVC实现多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实现多文件上传效率上却有着很大的差距 ...

  3. sock 文件方式控制宿主机_nginx与php-fpm通信的两种方式

    简述 在linux中,nginx服务器和php-fpm可以通过tcp socket和unix socket两种方式实现. unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数 ...

  4. 制定OKR的两种方式,你知道吗?

    OKR即目标与关键成果法,是一套明确和跟踪目标及其完成情况的管理工具和方法,由英特尔公司原CEO安迪·格鲁夫发明.并由约翰·杜尔引入到谷歌使用,1999年OKR在谷歌发扬光大,在Facebook.Li ...

  5. oracle并行parallel update两张表_Oracle并行更新的两种方式(merge/update内联视图)

    对于Oracle的两表联合更新的场景(有A.B两表,以A.id=B.id关联,根据B表中的记录更新A表中的相应字段),一般有update内联视图和merge两种方式,下面举例介绍: 创建用例表: cr ...

  6. 创建和应用Java包文件的两种方式

    <Java编程艺术>章节选登.作者:高永强 清华大学出版社 (即将出版) 12.1  包--package       包是Java提供的文件管理机制.包把功能相似的类,按照Java的名字 ...

  7. HashMap遍历的两种方式,推荐使用entrySet()

    转自:HashMap遍历的两种方式,推荐使用entrySet() 第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterat ...

  8. java文件读写的两种方式

    今天搞了下java文件的读写,自己也总结了一下,但是不全,只有两种方式,先直接看代码: public static void main(String[] args) throws IOExceptio ...

  9. java 读取css文件_java文件读取的两种方式

    JAVA中读取文件(二进制,字符)内容的几种方 JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代 ...

最新文章

  1. python基础教程(第二版)
  2. 【MyBatis】Mybatis实现分页效果
  3. 工艺路线和工序有差别吗_智能制造、数字化车间、数字化企业需要结构化工艺吗?...
  4. Fetch发送网络请求
  5. java中byte装箱和装箱_Java包装类、拆箱和装箱详解
  6. 表单的管理作业及答案
  7. 创业失败感悟第十四天
  8. 什么是三层架构?它的优点是什么?_三层实木和多层实木地板各有什么优劣点
  9. win11错误代码0xc1900101怎么解决 windows11错误代码0xc1900101的解决方法
  10. 设置Emeditor为Python的简易开发工具
  11. sklearn之PCA(主成分分析)
  12. Linux期末复习第三章
  13. 多个桌面Deskspace如何使用
  14. 如何用ChatGPT做品牌联名方案策划?
  15. c语言成绩管理程序设计,成绩管理程序设计报告(含代码C语言
  16. C语言编周期100ms的方波信号,单片机系统设计 - 2020学年春(邸志刚)-中国大学mooc-题库零氪...
  17. M2及WMO导入插件 (Max8)
  18. Shader学习之Cg语言三(Cg表达式与控制语句)
  19. 文献综述-家装风格自动分类技术综述
  20. adreno源码系列(五)打开kgsl

热门文章

  1. 大白菜软件常用功能介绍
  2. 斯诺登称美向日提供监控系统 日本人或遭大规模监控
  3. HTML5 虚拟键盘出现挡住输入框的解决办法
  4. 笨办法学C 练习22:栈、作用域和全局
  5. IOS - IOS之同步请求、异步请求、GET请求、POST请求
  6. linux下使用tar命令
  7. Keepalived+lvs+httpd之负载均衡
  8. 双重惊喜——Windows Phone Developer Tools初体验
  9. Microsoft office Communications server 2007部署
  10. hadoop优化之操作系统优化