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
*
* ************************************************************/
CLR_VIA_C# 数组
最新推荐文章于 2023-06-04 23:52:22 发布