-
Fototrend
Új hozzászólás Aktív témák
-
sztanozs
veterán
válasz pmonitor #19843 üzenetére
A problema nem az object/struct miatt van, hanem az unboxing miatt, mivel az egyik objektumod object tipusu, ezert az erteket explicite be-, es kicsomagolod (20., 89. es 93. sor). Ez viszi el a plusz idot, nem a GC:
.method private hidebysig static
void Main (
string[] args
) cil managed
{
.custom instance void System.Runtime.CompilerServices.NullableContextAttribute::.ctor(uint8) = (
01 00 01 00 00
)
// Method begins at RVA 0x2094
// Header size: 12
// Code size: 171 (0xab)
.maxstack 6
.entrypoint
.locals init (
[0] int64 i,
[1] int64 j,
[2] int64 m,
[3] class [System.Runtime]System.Diagnostics.Stopwatch sw,
[4] int64 n,
[5] object k,
[6] int64 p,
[7] bool,
[8] bool
)
// {
IL_0000: nop
// long num = 0L;
IL_0001: ldc.i4.0
IL_0002: conv.i8
IL_0003: stloc.0
// long num2 = 0L;
IL_0004: ldc.i4.0
IL_0005: conv.i8
IL_0006: stloc.1
// long num3 = 0L;
IL_0007: ldc.i4.0
IL_0008: conv.i8
IL_0009: stloc.2
// Stopwatch stopwatch = Stopwatch.StartNew();
IL_000a: call class [System.Runtime]System.Diagnostics.Stopwatch [System.Runtime]System.Diagnostics.Stopwatch::StartNew()
IL_000f: stloc.3
// for (num3 = 0L; num3 < 3000000000u; num3++)
IL_0010: ldc.i4.0
IL_0011: conv.i8
IL_0012: stloc.2
// (no C# code)
IL_0013: br.s IL_0020
// loop start (head: IL_0020)
// num = num3;
IL_0015: nop
IL_0016: ldloc.2
IL_0017: stloc.0
// num2 = num;
IL_0018: ldloc.0
IL_0019: stloc.1
// for (num3 = 0L; num3 < 3000000000u; num3++)
IL_001a: nop
IL_001b: ldloc.2
IL_001c: ldc.i4.1
IL_001d: conv.i8
IL_001e: add
IL_001f: stloc.2
// for (num3 = 0L; num3 < 3000000000u; num3++)
IL_0020: ldloc.2
IL_0021: ldc.i4 -1294967296
IL_0026: conv.u8
IL_0027: clt
IL_0029: stloc.s 7
// long elapsedMilliseconds = stopwatch.ElapsedMilliseconds;
IL_002b: ldloc.s 7
IL_002d: brtrue.s IL_0015
// end loop
IL_002f: ldloc.3
IL_0030: callvirt instance int64 [System.Runtime]System.Diagnostics.Stopwatch::get_ElapsedMilliseconds()
IL_0035: stloc.s 4
// for (num3 = 0L; num3 < 3000000000u; num3++)
IL_0037: ldc.i4.0
IL_0038: conv.i8
IL_0039: stloc.2
// (no C# code)
IL_003a: br.s IL_0053
// loop start (head: IL_0053)
// object obj = num3;
IL_003c: nop
IL_003d: ldloc.2
IL_003e: box [System.Runtime]System.Int64
IL_0043: stloc.s 5
// num2 = (long)obj;
IL_0045: ldloc.s 5
IL_0047: unbox.any [System.Runtime]System.Int64
IL_004c: stloc.1
// for (num3 = 0L; num3 < 3000000000u; num3++)
IL_004d: nop
IL_004e: ldloc.2
IL_004f: ldc.i4.1
IL_0050: conv.i8
IL_0051: add
IL_0052: stloc.2
// for (num3 = 0L; num3 < 3000000000u; num3++)
IL_0053: ldloc.2
IL_0054: ldc.i4 -1294967296
IL_0059: conv.u8
IL_005a: clt
IL_005c: stloc.s 8
// long elapsedMilliseconds2 = stopwatch.ElapsedMilliseconds;
IL_005e: ldloc.s 8
IL_0060: brtrue.s IL_003c
// end loop
IL_0062: ldloc.3
IL_0063: callvirt instance int64 [System.Runtime]System.Diagnostics.Stopwatch::get_ElapsedMilliseconds()
IL_0068: stloc.s 6
// Console.WriteLine("{0} {1} {2} {3}", num2, num3, elapsedMilliseconds, elapsedMilliseconds2 - elapsedMilliseconds);
IL_006a: ldstr "{0} {1} {2} {3}"
IL_006f: ldc.i4.4
IL_0070: newarr [System.Runtime]System.Object
IL_0075: dup
IL_0076: ldc.i4.0
IL_0077: ldloc.1
IL_0078: box [System.Runtime]System.Int64
IL_007d: stelem.ref
IL_007e: dup
IL_007f: ldc.i4.1
IL_0080: ldloc.2
IL_0081: box [System.Runtime]System.Int64
IL_0086: stelem.ref
IL_0087: dup
IL_0088: ldc.i4.2
IL_0089: ldloc.s 4
IL_008b: box [System.Runtime]System.Int64
IL_0090: stelem.ref
IL_0091: dup
IL_0092: ldc.i4.3
IL_0093: ldloc.s 6
IL_0095: ldloc.s 4
IL_0097: sub
IL_0098: box [System.Runtime]System.Int64
IL_009d: stelem.ref
// (no C# code)
IL_009e: call void [System.Console]System.Console::WriteLine(string, object[])
// Console.ReadKey();
IL_00a3: nop
IL_00a4: call valuetype [System.Console]System.ConsoleKeyInfo [System.Console]System.Console::ReadKey()
IL_00a9: pop
// }
IL_00aa: ret
} // end of method Program::MainAz optimalizalt valtozatot nezve jol lahthato a ket "felesleges" utasitas:
// loop start (head: IL_0018)
IL_0011: ldloc.1
IL_0012: stloc.0
vs// loop start (head: IL_003e)
IL_002d: ldloc.1
IL_002e: box [System.Runtime]System.Int64
IL_0033: unbox.any [System.Runtime]System.Int64
IL_0038: stloc.0[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- kraftxld: Diáklaptop - Dell Inspiron 3140 - Királyunk ajándéka
- Kerékpárosok, bringások ide!
- Kínai, és egyéb olcsó órák topikja
- EAFC 24
- Horgász topik
- Konteó topic
- Redmi Note 12 4G - valaki fizetni fog
- Satisfactory - Epikus bolygóiparszimulátor FPS
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Autós topik
- További aktív témák...
- FULL HD Lenovo Thinkpad T490/Touch Core I5/I7 256/512Gb M.2 SSD Nvidia MX 250 WIN11 Gar Laptop
- Dell Precision 7530,15.6",4K UHD,i9-8950H,64GB DDR4,512GB SSD,6GB VGA,WIN11
- Samsung Galaxy Watch 4 44mm, Bluetooth, 1 Év Garanciával
- Samsung Galaxy Note 20 Ultra 5G 256GB, Kártyafüggetlen, 1 Év Garanciával
- Samsung Galaxy S20 FE 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen