public static CodeTimerResult Time(string name, int iteration, Action action) { if (String.IsNullOrEmpty(name)) { return(null); } if (action == null) { return(null); } var result = new CodeTimerResult(); result = result.Reset(); result.Name = name; result.Iteration = iteration; GC.Collect(GC.MaxGeneration); var gcCounts = new int[GC.MaxGeneration + 1]; for (int i = 0; i <= GC.MaxGeneration; i++) { gcCounts[i] = GC.CollectionCount(i); } // 3. Run action var watch = new Stopwatch(); watch.Start(); long ticksFst = GetCurrentThreadTimes(); //100 nanosecond one tick for (int i = 0; i < iteration; i++) { action(); } long ticks = GetCurrentThreadTimes() - ticksFst; watch.Stop(); // 4. Print CPU result.TimeElapsed = watch.ElapsedMilliseconds; result.CpuCycles = ticks * 100; // 5. Print GC for (int i = 0; i <= GC.MaxGeneration; i++) { int count = GC.CollectionCount(i) - gcCounts[i]; result.GenerationList[i] = count; } return(result); }
public static CodeTimerResult Time(string name, int iteration, Action action) { if (String.IsNullOrEmpty(name)) { return null; } if (action == null) { return null; } var result = new CodeTimerResult(); result = result.Reset(); result.Name = name; result.Iteration = iteration; GC.Collect(GC.MaxGeneration); var gcCounts = new int[GC.MaxGeneration + 1]; for (int i = 0; i <= GC.MaxGeneration; i++) { gcCounts[i] = GC.CollectionCount(i); } // 3. Run action var watch = new Stopwatch(); watch.Start(); long ticksFst = GetCurrentThreadTimes(); //100 nanosecond one tick for (int i = 0; i < iteration; i++) action(); long ticks = GetCurrentThreadTimes() - ticksFst; watch.Stop(); // 4. Print CPU result.TimeElapsed = watch.ElapsedMilliseconds; result.CpuCycles = ticks*100; // 5. Print GC for (int i = 0; i <= GC.MaxGeneration; i++) { int count = GC.CollectionCount(i) - gcCounts[i]; result.GenerationList[i] = count; } return result; }