C#中各种数组的性能比较
2010-09-30 22:38:05 来源:WEB开发网在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,交错数组
更多精彩
赞助商链接