C#代碼:
int YourVersion()
{
DateTime dt1 = DateTime.Now;
DateTime dt2 = DateTime.Now.AddDays(-10);
int daysDiff = (dt2 - dt1).Days;
return daysDiff;
}
int SeniorVersion()
{
DateTime dt1 = DateTime.Now;
DateTime dt2 = DateTime.Now.AddDays(-10);
TimeSpan ts = dt2 - dt1;
int daysDiff = ts.Days;
return daysDiff;
}
編譯於VS2013,發佈版本,反編譯IL:
此致:
.method private hidebysig instance int32
YourVersion() cil managed
{
// Code size 48 (0x30)
.maxstack 2
.locals init ([0] valuetype [mscorlib]System.DateTime dt1,
[1] valuetype [mscorlib]System.DateTime dt2,
[2] int32 daysDiff,
[3] valuetype [mscorlib]System.DateTime CS$0$0000,
[4] valuetype [mscorlib]System.TimeSpan CS$0$0001)
IL_0000: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
IL_0005: stloc.0
IL_0006: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
IL_000b: stloc.3
IL_000c: ldloca.s CS$0$0000
IL_000e: ldc.r8 -10.
IL_0017: call instance valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::AddDays(float64)
IL_001c: stloc.1
IL_001d: ldloc.1
IL_001e: ldloc.0
IL_001f: call valuetype [mscorlib]System.TimeSpan [mscorlib]System.DateTime::op_Subtraction(valuetype [mscorlib]System.DateTime,
valuetype [mscorlib]System.DateTime)
IL_0024: stloc.s CS$0$0001
IL_0026: ldloca.s CS$0$0001
IL_0028: call instance int32 [mscorlib]System.TimeSpan::get_Days()
IL_002d: stloc.2
IL_002e: ldloc.2
IL_002f: ret
} // end of method Program::YourVersion
你天尊:
.method private hidebysig instance int32
SeniorVersion() cil managed
{
// Code size 48 (0x30)
.maxstack 2
.locals init ([0] valuetype [mscorlib]System.DateTime dt1,
[1] valuetype [mscorlib]System.DateTime dt2,
[2] valuetype [mscorlib]System.TimeSpan ts,
[3] int32 daysDiff,
[4] valuetype [mscorlib]System.DateTime CS$0$0000)
IL_0000: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
IL_0005: stloc.0
IL_0006: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
IL_000b: stloc.s CS$0$0000
IL_000d: ldloca.s CS$0$0000
IL_000f: ldc.r8 -10.
IL_0018: call instance valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::AddDays(float64)
IL_001d: stloc.1
IL_001e: ldloc.1
IL_001f: ldloc.0
IL_0020: call valuetype [mscorlib]System.TimeSpan [mscorlib]System.DateTime::op_Subtraction(valuetype [mscorlib]System.DateTime,
valuetype [mscorlib]System.DateTime)
IL_0025: stloc.2
IL_0026: ldloca.s ts
IL_0028: call instance int32 [mscorlib]System.TimeSpan::get_Days()
IL_002d: stloc.3
IL_002e: ldloc.3
IL_002f: ret
} // end of method Program::SeniorVersion
的區別?你的編譯器生成TimeSpan
變量用於保存dt2 - dt1
的結果,並且你的老人有一個命名變量。除此之外,它們是相同的代碼。
沒有內存泄漏的風險,代碼在32位和64位系統上運行完全一樣。
(有基於用來訪問局部變量的具體說明一些細微的差別,但這些都不是預期產生的代碼的JIT可以產生任何干擾)
你的高級不知道他在說關於。 –
這是完全一樣的東西。 – studert
你的計算方法更好,因爲你不會創建不必要的變量來保持時間跨度。 –