C#复制数组的两种方式,以及效率比较
如何高效地进行数组复制?
如果把一个变量值复制给另外一个数组变量,那么2个变量指向托管堆上同一个引用。
如果想在托管堆上创建另外的一份数组实例,通常使用Array.Copy方法。
class Program
{
static void Main(string[] args)
{
int[] a = {, , };
int[] b =new int[a.Length];
Array.Copy(a,,b,,a.Length); MyArrCopy myArrCopy = new MyArrCopy();
myArrCopy.Display(a);
Console.ReadKey();
}
} public class MyArrCopy
{
public void Display(int[] arr)
{
for (int i = ; i < arr.Length; i++)
{
if (i != )
{
Console.Write(",");
}
Console.Write(arr[i]);
}
}
}
在数据量大的情况下,使用Buffer.BlockCopy方法将会拥有更高的复制效率。
分别测试使用Buffer.BlockCopy和Array.Copy的区别。
public class CopyTest
{
private int[] _myArr;//数组源
private int[] _blockArr=new int[];//使用 Buffer.BlockCopy的目标数组
private int[] _copyArr=new int[];//使用Array.Copy的目标数组 public CopyTest(int[] myArr)
{
_myArr = myArr;
} public void TestBlockCopy()
{
Stopwatch sw = new Stopwatch();
sw.Start();
Buffer.BlockCopy(_myArr, ,_blockArr,,_myArr.Length);
sw.Stop();
Console.WriteLine("使用Buffer.BlockCopy方法:" + sw.ElapsedTicks);
} public void TestNormalCopy()
{
Stopwatch sw = new Stopwatch();
sw.Start();
Array.Copy(_myArr, , _copyArr,, _myArr.Length);
sw.Start();
Console.WriteLine("使用Array.Copy方法:" + sw.ElapsedTicks);
}
}
客户端。
int[] a = new int[];
for (int i = ; i < ; i++)
{
a[i] = i;
} var copyTest = new CopyTest(a);
copyTest.TestBlockCopy();
copyTest.TestNormalCopy(); Console.ReadKey();
}

C#复制数组的两种方式,以及效率比较的更多相关文章
- Java实现深克隆的两种方式
序列化和依次克隆各个可变的引用类型都可以实现深克隆,但是序列化的效率并不理想 下面是两种实现深克隆的实例,并且测试类对两种方法进行了对比: 1.重写clone方法使用父类中的clone()方法实现深克 ...
- ORACLE导入大量数据的两种方式比较
不管是开发还是测试,工作中经常需要去批量新增测试数据,但是大量数据的新增速度有时候让我们苦不堪言,下面通过两种方式完成oracle数据的批量新增,比较两种方式的效率. 第一种方式:采用工具导入sql文 ...
- springMVC两种方式实现多文件上传及效率比较
springMVC实现 多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实 现多文件上传效率上却有着很大的 ...
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
- Sql Server 聚集索引扫描 Scan Direction的两种方式------FORWARD 和 BACKWARD
最近发现一个分页查询存储过程中的的一个SQL语句,当聚集索引列的排序方式不同的时候,效率差别达到数十倍,让我感到非常吃惊 由此引发出来分页查询的情况下对大表做Clustered Scan的时候, 不同 ...
- WebService的两种方式Soap和Rest比较
我的读后感:由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑.如google map api采用了AJAX方式,通过javascript ...
- java中实现同步的两种方式:syschronized和lock的区别和联系
Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...
- WebService的两种方式SOAP和REST比较 (转)
我的读后感:由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑.如google map api采用了AJAX方式,通过javascript ...
- cocos2d-x的lua脚本加载CocostudioUI两种方式
前言 当前版本使用的是quick cocos2dx lua 3.3.UI使用cocostudio编辑器1.6.0.我们在程序里面可以使用两种方式进行解析UI.开始的时候用的是quick的方法, 结果遇 ...
随机推荐
- 升级openssh到最新版本
首先,下载最新版本,传到服务器:http://mirror.aarnet.edu.au/pub/OpenBSD/OpenSSH/portable/ 安装 cd /root/ mkdir ssh_upg ...
- jenkins之参数化构建
事件背景: 今天一早接到一个需求,说要jenkins持续集成,输入自定义URL,然后完成回归测试,当时有点蒙,不知道如何下手,听群里的大神思路后豁然开朗,就记录了下 一.先安装插件 插件: [Buil ...
- 在Jenkins中配置执行远程shell命令(转)
用过Jenkins的都知道,在Build配置那里有1个Add buld step, 有这样两个选项: 1. Execute Windows batch command 2. Execute shell ...
- 【转】使用import scope解决maven继承(单)问题
http://blog.csdn.net/mn960mn/article/details/50894022 测试环境 maven 3.3.9 想必大家在做SpringBoot应用的时候,都会有如下代码 ...
- java 异常的限制
一. 1.) 在覆盖方法的时候,只能抛出在基类方法的异常说明里列出的那些异常 2.) 在基类构造器声明的异常,在子类必须抛出,子类的构造器可以抛出任何异常,但是必须抛出基类构造器的异常 3.) 在基类 ...
- 解决tomcat 启动 一闪而过
有的朋友在启动Tomcat的时候会出现问题. 1例如: 手动点击startup.bat 后 ,一闪而过 2例如:在cmd下 进到tomcat的bin目录 运行 startup.bat ,然后输出 了J ...
- Linux系统运维笔记(二),Linux文件编辑命令
Linux系统运维笔记 Linux文件编辑命令 首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式 接下来我们按i,然后键盘随便输入写内容. 然后按ESC重新进入到命令 ...
- Nginx服务状态的监控
https://www.cnblogs.com/beginner-boy/p/8052908.html
- 针对LDAP安装web接口,进行管理
1. 通过SSH连接LDAP服务器 2. 安装phpLDAPadmin运行以下命令. $ sudo apt-get install phpldapadmin 3. 配置phpLDAPadmin. $ ...
- Java基础常见英语词汇(共70个)
——————————ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— Java英文单词 OO: object—oriented ,面向对象 OOP:obje ...