using System.Collections.Generic;
using System.Diagnostics;
public static class MeasureTime
public static double RunElapsedTicks(Action func, long count = 1)
throw new ArgumentOutOfRangeException("count", "Количество повторных запусков функции должно быть больше нуля");
long[] arr_time = new long[count];
Stopwatch sw = new Stopwatch();
for (long i = 0; i < count; i++)
arr_time[i] = sw.ElapsedTicks;
return count == 1 ? arr_time[0] : Math.Round(arr_time.Sum() / (double)count);
public static TimeSpan Run(Action func, long count = 1)
return new TimeSpan(Convert.ToInt64(RunElapsedTicks(func, count)));
public static string FormatRun(Action func, long count = 1)
return String.Format("{0:hh\\:mm\\:ss\\:fff}", Run(func, count));
public static Dictionary<Values, string> dct_values = new Dictionary<Values, string>{{Values.Value1, "value1"}, {Values.Value2, "value2"}, {Values.Value3, "value3"}, {Values.Value4, "value4"}, {Values.Value5, "value5"}, {Values.Value6, "value6"}, {Values.Value7, "value7"}, {Values.Value8, "value8"}, {Values.Value9, "value9"}, {Values.Value10, "value10"}};
public static void Main()
Values cur_value = Values.Value10;
string result = String.Empty;
double switch_timer_ticks = MeasureTime.RunElapsedTicks(() =>
Console.WriteLine("switch timer ticks: " + switch_timer_ticks);
double dct_timer_ticks = MeasureTime.RunElapsedTicks(() =>
result = dct_values[cur_value];
Console.WriteLine("dictionary timer ticks: " + dct_timer_ticks);
TimeSpan ts_switch = MeasureTime.Run(() =>
Console.WriteLine("switch ms: " + ts_switch.TotalMilliseconds);
TimeSpan ts_dct = MeasureTime.Run(() =>
result = dct_values[cur_value];
Console.WriteLine("dictionary ms: " + ts_dct.TotalMilliseconds);