private static BenchmarkResult RunBenchmark(MethodInfo method, object instance, BenchmarkOptions options) { var action = (Action)Delegate.CreateDelegate(typeof(Action), instance, method); // Start small, double until we've hit our warm-up time int iterations = 100; while (true) { Duration duration = RunTest(action, iterations, options.Timer); if (duration >= options.WarmUpTime) { // Scale up the iterations to work out the full test time double scale = ((double)options.TestTime.Ticks) / duration.Ticks; iterations = (int)(iterations * scale); break; } iterations *= 2; } Duration testDuration = RunTest(action, iterations, options.Timer); return new BenchmarkResult(method, iterations, testDuration); }
public string ToString(BenchmarkOptions options) { string formatString = options.DisplayRawData ? LongFormatString : ShortFormatString; return string.Format(formatString, Method.Name, CallsPerSecond, Iterations, Duration.Ticks, TicksPerCall); }