C#复制数组的两种方式及效率比较
作者:Darren?Ji 发布时间:2023-07-15 04:19:12
标签: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();
来源:https://www.cnblogs.com/darrenji/p/4539082.html
0
投稿
猜你喜欢
- 一、Flutter代码的启动起点我们在多数的业务场景下,使用的都是FlutterActivity、FlutterFragment。在在背后,
- 就网络和应用程序而言,键盘快捷键很重要,今天我们要谈的便是让这类快捷键得以在Flutter运作的小部件:Focus、Shortcuts和Ac
- 这篇会深化View拖拽实例,利用Flutter Animation、插值器以及AnimatedBuilder教大家实现带动画的抽屉效果。先来
- 本文实例为大家分享了C++实现俄罗斯方块的具体代码,供大家参考,具体内容如下先是效果图:主菜单:游戏:设置:错误处理:代码:#include
- 这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- 在实际应用中,我们往往有需要比较两个自定义对象大小的地方。而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我
- google benchmark已经为我们提供了类似的功能,而且使用相当简单。具体的解释在后面,我们先来看几个例子,我们人为制造几个时间复杂
- 本文向您展示了在 Flutter 中实现完美的验证码输入框几种不同方法。重点是什么?真实世界的 完美的验证码输入框或 PIN 输入 UI 通
- 我们都知道,当RecyclerView数据源更新后,还需要通过adapter调用对应的方法,从而让RecyclerView重新绘制页面本次也
- Java BufferWriter写文件之后文件是空的或者数据不全在编程的过程中,读写文件是非常常见的操作,在这里我问介绍一下最近我遇到的集
- 引言我已经一个多星期没碰过电脑了,今日上班,打开电脑的第一件事就是想着写点什么。反正大家都还沉浸在节后的喜悦中,还没进入工作状态,与其浪费时
- 用java实现循环队列的方法:1、添加一个属性size用来记录眼下的元素个数。目的是当head=rear的时候。通过size=0还是size
- 很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。对于软件配置参数的保存,
- Mybatis-Spring当我们使用mybatis和spring整合后为什么下面的代码可以运行?一个问题:我就写了个mapper接口为什么
- 在谈 JVM 内存区域划分之前,我们先来看一下 Java 程序的具体执行过程,我画了一幅图。Java 源代码文件经过编译器编译后生成字节码文
- 一. 线性表中的顺序表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见
- 前言我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程)。没错,它们是spring的基石,得益于它们的
- using System; using System.Collections.Generic; using System.Text; usi
- MultiFrameImageStreamCompleterMultiFrameImageStreamCompleter 是一个可组合的 I
- strftime函数主要用于时间格式化,它的函数原型如下:size_t __cdecl strftime(char * __restrict