当尝试将分钟/秒四舍五入到最近的小时时(在这种情况下忽略分钟/秒部分),我对以下行为感到好奇。
我尝试了两种方法,并使用BenchMarkDotNet对两种方法进行了基准测试。
private DateTime testData = DateTime.Now;
[Benchmark]
public DateTime CeilingUsingNewOperator() => new DateTime(testData.Year,testData.Month,testData.Day,testData.Hour + 1,0,0);
[Benchmark]
public DateTime CeilingUsingAddOperator() => testData.AddHours(1).AddMinutes(-testData.Minute).AddSeconds(-testData.Second);
以下是结果。
+-------------------------+-----------+----------+----------+
| Method | Mean | Error | StdDev |
+-------------------------+-----------+----------+----------+
| CeilingUsingNewOperator | 207.99 ns | 3.465 ns | 3.072 ns |
| CeilingUsingAddOperator | 108.74 ns | 1.429 ns | 1.337 ns |
+-------------------------+-----------+----------+----------+
我很好奇为什么使用New Operator速度较慢,如果我假设,每次我们在第二种方法中调用AddX方法时,都会得到一个DateTime对象。
请问有人能解释一下吗?