WEB开发网
开发学院软件开发C语言 C#中各种数组的性能比较 阅读

C#中各种数组的性能比较

 2010-09-30 22:38:05 来源:WEB开发网   
核心提示:在C#中提供了一维数组,多维数组,C#中各种数组的性能比较,和交错数组(也叫齿状数组Jagged Array),由于C#本身并不直接支持非0基(0基的意思是数组的最小索引是0)的数组(虽然可以通过Array.CreateInstance()方法在C#中创建非0基数组),大家看看如下的代码:int[]arr=newint

在C#中提供了一维数组,多维数组,和交错数组(也叫齿状数组Jagged Array),由于C#本身并不直接支持非0基(0基的意思是数组的最小索引是0)的数组(虽然可以通过Array.CreateInstance()方法在C#中创建非0基数组),而且CLS(通用语言规范)也并不支持非0基数组,所以这篇文章中不讨论非0基数组。

1,一维0基数组:

一般情况下,建议大家最好使用一维0基数组,在C#直接支持的数组中,这种类型的数组性能最好,因为在IL中直接提供了特殊的指令来操作一维0基数组,大家看看如下的代码:

   int[] arr = new int[5];
   int i = arr[3];

这两行代码生成的IL是这样的:

  .entrypoint
  // 代码大小       13 (0xd)
  .maxstack  2
  .locals init ([0] int32[] arr,
           [1] int32 i)
  IL_0000:  nop
  IL_0001:  ldc.i4.5
  IL_0002:  newarr     [mscorlib]System.Int32
  IL_0007:  stloc.0
  IL_0008:  ldloc.0
  IL_0009:  ldc.i4.3
  IL_000a:  ldelem.i4
  IL_000b:  stloc.1
  IL_000c:  ret

大家可以看到IL提供了newarr指令来新建一个数组,ldelem.i4指令来获取Int32类型的数组元素,此外IL还6提供了其他的指令来操作一维0基数组:

ldelema   :读取一维0基数组中一个元素的地址

ldlen     :读取一维0基数组中的元素个数

stelem    :为数组中的一个元素赋值

ldelem.ref:则用于操作所有包含引用类型对象的数组

2,交错数组

1 2 3  下一页

Tags:各种 数组 性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接