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 *  * ************************************************************/

原创粉丝点击