C#复制数组的两种方式,以及效率比较
如何高效地进行数组复制?
如果把一个变量值复制给另外一个数组变量,那么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#复制数组的两种方式,以及效率比较相关推荐
- java 深克隆_Java实现深克隆的两种方式
序列化和依次克隆各个可变的引用类型都可以实现深克隆,但是序列化的效率并不理想 下面是两种实现深克隆的实例,并且测试类对两种方法进行了对比: 1.重写clone方法使用父类中的clone()方法实现深克 ...
- springMVC两种方式实现多文件上传及效率比较
springMVC实现多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实现多文件上传效率上却有着很大的差距 ...
- sock 文件方式控制宿主机_nginx与php-fpm通信的两种方式
简述 在linux中,nginx服务器和php-fpm可以通过tcp socket和unix socket两种方式实现. unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数 ...
- 制定OKR的两种方式,你知道吗?
OKR即目标与关键成果法,是一套明确和跟踪目标及其完成情况的管理工具和方法,由英特尔公司原CEO安迪·格鲁夫发明.并由约翰·杜尔引入到谷歌使用,1999年OKR在谷歌发扬光大,在Facebook.Li ...
- oracle并行parallel update两张表_Oracle并行更新的两种方式(merge/update内联视图)
对于Oracle的两表联合更新的场景(有A.B两表,以A.id=B.id关联,根据B表中的记录更新A表中的相应字段),一般有update内联视图和merge两种方式,下面举例介绍: 创建用例表: cr ...
- 创建和应用Java包文件的两种方式
<Java编程艺术>章节选登.作者:高永强 清华大学出版社 (即将出版) 12.1 包--package 包是Java提供的文件管理机制.包把功能相似的类,按照Java的名字 ...
- HashMap遍历的两种方式,推荐使用entrySet()
转自:HashMap遍历的两种方式,推荐使用entrySet() 第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterat ...
- java文件读写的两种方式
今天搞了下java文件的读写,自己也总结了一下,但是不全,只有两种方式,先直接看代码: public static void main(String[] args) throws IOExceptio ...
- java 读取css文件_java文件读取的两种方式
JAVA中读取文件(二进制,字符)内容的几种方 JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代 ...
最新文章
- python基础教程(第二版)
- 【MyBatis】Mybatis实现分页效果
- 工艺路线和工序有差别吗_智能制造、数字化车间、数字化企业需要结构化工艺吗?...
- Fetch发送网络请求
- java中byte装箱和装箱_Java包装类、拆箱和装箱详解
- 表单的管理作业及答案
- 创业失败感悟第十四天
- 什么是三层架构?它的优点是什么?_三层实木和多层实木地板各有什么优劣点
- win11错误代码0xc1900101怎么解决 windows11错误代码0xc1900101的解决方法
- 设置Emeditor为Python的简易开发工具
- sklearn之PCA(主成分分析)
- Linux期末复习第三章
- 多个桌面Deskspace如何使用
- 如何用ChatGPT做品牌联名方案策划?
- c语言成绩管理程序设计,成绩管理程序设计报告(含代码C语言
- C语言编周期100ms的方波信号,单片机系统设计 - 2020学年春(邸志刚)-中国大学mooc-题库零氪...
- M2及WMO导入插件 (Max8)
- Shader学习之Cg语言三(Cg表达式与控制语句)
- 文献综述-家装风格自动分类技术综述
- adreno源码系列(五)打开kgsl