using System.Diagnostics;
private static void Benchmark(string name, Action act, int iterations)
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < iterations; i++)
var microSec = 1m * sw.ElapsedTicks * 1000 * 1000 / Stopwatch.Frequency / iterations;
Console.WriteLine(string.Format("{0}: {1:0.00} µs", name, microSec));
public static void Main(string[] args)
for(int i = 0; i < 10; i++) {
Benchmark("Explicit", () => { var a = VersionExplicit(); }, iterations);
Benchmark("Modulo", () => { var b = VersionModulo(); }, iterations);
Benchmark("DateTime.Now", () => { var c = DateTime.Now; }, iterations);
private static DateTime VersionExplicit() {
return new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, date.Kind);
private static DateTime VersionModulo() {
var dateTime = DateTime.Now;
return dateTime.AddTicks( - (dateTime.Ticks % TimeSpan.TicksPerSecond));