سلام.
لطفا این کد رو نگاه کنید:
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0, count = array.Length; i < count; i++)
{
// code
}
for (int i = 0; i < array.Length; i++)
{
// code
}
قبل از اینکه حلقه for اول ایجاد بشه ابتدا طول آرایه رو در یک متغیر ذخیره شده سپس از متغیر در حلقه استفاده شده ، اما در حلقه دوم به ازای هر بار چرخش یک بار به ویژگی Lenght آرایه دسترسی پیدا میشه آیا این باعث کند تر شدن چرخش حلقه نمیشه؟
کد IL:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 63 (0x3f)
.maxstack 3
.locals init ([0] int32[] 'array',
[1] int32 i,
[2] int32 count,
[3] bool CS$4$0000)
IL_0000: nop
IL_0001: ldc.i4.s 10
IL_0003: newarr [mscorlib]System.Int32
IL_0008: dup
IL_0009: ldtoken field valuetype '<PrivateImplementationDetails>{A451010A-8F6E-428E-895C-BDF1BFA614FF}'/'__StaticArrayInitTypeSize=40' '<PrivateImplementationDetails>{A451010A-8F6E-428E-895C-BDF1BFA614FF}'::'$$method0x6000001-1'
IL_000e: call void [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::InitializeArray(class [mscorlib]System.Array,
valuetype [mscorlib]System.RuntimeFieldHandle)
IL_0013: stloc.0
IL_0014: ldc.i4.0
IL_0015: stloc.1
IL_0016: ldloc.0
IL_0017: ldlen
IL_0018: conv.i4
IL_0019: stloc.2
IL_001a: br.s IL_0022
IL_001c: nop
IL_001d: nop
IL_001e: ldloc.1
IL_001f: ldc.i4.1
IL_0020: add
IL_0021: stloc.1
IL_0022: ldloc.1
IL_0023: ldloc.2
IL_0024: clt
IL_0026: stloc.3
IL_0027: ldloc.3
IL_0028: brtrue.s IL_001c
IL_002a: ldc.i4.0
IL_002b: stloc.1
IL_002c: br.s IL_0034
IL_002e: nop
IL_002f: nop
IL_0030: ldloc.1
IL_0031: ldc.i4.1
IL_0032: add
IL_0033: stloc.1
IL_0034: ldloc.1
IL_0035: ldloc.0
IL_0036: ldlen
IL_0037: conv.i4
IL_0038: clt
IL_003a: stloc.3
IL_003b: ldloc.3
IL_003c: brtrue.s IL_002e
IL_003e: ret
} // end of method Program::Main