以上是生成一个一维数组并对其赋值,如果要是清除数组中的数据,可能你的第一印象就是使用循环int[] demo=new int[5];
for(int i=0;i<5;i++);
{
demo[i]=i;
}
for(int i=0;i<5;i++)
{
demo[i]=0;
}
但是当数组很大时这个种方法就没有那么好了
还有一种方法就是重新分配空间
demo = new int[5];
另一种方法是使用
Array.Clear:
Array.Clear(demo,0,5);
参数2表示要清除的元素在数组的起始索引位置;
参数3表示从起始位置开始要清除的元素的个数;
这种方法的另一个好处是可以
清除数组中指定元素的数据
new方法和
Array.Clear的效率的比较:
运行结果:byte[] test=new byte[1024]; test[2]=50; DateTime dt1=DateTime.Now; for(int i=0;i<10000;i++) { for(int a=0;a<1024;a++) { test[a]=0; } test[2]=50; } DateTime dt2=DateTime.Now; for(int i=0;i<10000;i++) { test=new byte[1024]; test[2]=50; } DateTime dt3=DateTime.Now; for(int i=0;i<10000;i++) { Array.Clear(test,0,1024); test[2]=50; } DateTime dt4=DateTime.Now; Console.WriteLine("for={0}\nnew={1}\nclear={2}\n",dt2-dt1,dt3-dt2,dt4-dt3);
但是上面的测试是基于需要大量(10000次)进行初始化数组的情况
如果我们只需要很少次的初始化情况又是什么样的呢?来看看测试吧
首先是1次的:
10次的:
100次的:
1000次的:
运行的情况大家一目了然了,关于for循环这里就不说了,不仅程序要相对复杂,而且性能也显著不行
现在我们来讨论一下new和Array.clear()
较少次的初始化
new的性能明显,但随着初始化次数的增加其弊端逐渐显现出来,因为new操作需要重新申请连续的内存空间,少量的初始化内存有足够的空间提供其使用,但次数多了,造成内存上产生很多垃圾空间,可用的连续内存空间减少从而触发GC回收垃圾空间,
要知道GC是一个相当占用时间的过程(有兴趣的可以看一下
GC的工作原理
),
整理内存空间,将非垃圾数据全部移动到托管堆起始连续的一片内存空间上,致使部分或全部的对象的引用地址被改写。
Array.clear()操作在0~1000
次变化不是很大
。即使在增加到10000次也没有变化太大