CLR_VIA_C# 数组
来源:互联网 发布:淘宝客服速成 编辑:程序博客网 时间:2024/05/21 10:20
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Diagnostics;namespace CLR_VIA_C__数组{ class Program { private const Int32 c_numElements = 1000; static void Main(string[] args) { const Int32 testCount = 10; Stopwatch sw; //声明一个二维数组 Int32[,] a2Dim = new Int32[c_numElements, c_numElements]; //将一个二维数组声明为交错数组(向量构成的向量) Int32[][] aJagged = new Int32[c_numElements][]; for(Int32 i=0;i<c_numElements;i++) aJagged[i] = new Int32[c_numElements]; //1:用普通的安全技术访问数组的所有元素 sw = Stopwatch.StartNew(); for (Int32 i = 0; i < testCount; i++) Safe2DimArrayAccess(a2Dim); Console.WriteLine("{0}:Safe2DimArrayAccess",sw.Elapsed); //2:用交错数组技术访问数组的所有元素 sw = Stopwatch.StartNew(); for (Int32 i = 0; i < testCount; i++) SafeJaggedArrayAccess(aJagged); Console.WriteLine("{0}:SafeJaggedArrayAccess", sw.Elapsed); //1:用unsafe技术访问数组的所有元素 sw = Stopwatch.StartNew(); for (Int32 i = 0; i < testCount; i++) Unsafe2DimArrayAccess(a2Dim); Console.WriteLine("{0}:Unsafe2DimArrayAccess", sw.Elapsed); Console.ReadLine(); } private static Int32 Safe2DimArrayAccess(Int32[,] a) { Int32 sum=0; for (Int32 x = 0; x < c_numElements; x++) for (Int32 y = 0; y < c_numElements; y++) sum+=a[x,y]; return sum; } private static Int32 SafeJaggedArrayAccess(Int32[][] a) { Int32 sum = 0; for (Int32 x = 0; x < c_numElements; x++) for (Int32 y = 0; y < c_numElements; y++) sum += a[x][y]; return sum; } private static unsafe Int32 Unsafe2DimArrayAccess(Int32[,] a) { Int32 sum = 0; fixed (int* pi=a) for (Int32 x = 0; x < c_numElements; x++) { Int32 baseOfDim = x * c_numElements; for (Int32 y = 0; y < c_numElements; y++) sum += pi[baseOfDim + y]; } return sum; } }}/************************************************************ * 普通的安全技术访问数组速度最慢。安全交错数组时间消耗略少于安全安全二维数组访问技术 * 但是,创建交错数组所花的时间多于创建多维数组所花的时间。因为创建交错数组时,要求在堆 * 上为每一维分配一个对象,造成垃圾回收器的周期活动。 * * CLR VIA C# P350 * * ************************************************************/