The include file “Benchmark.mqh” has a set of macros to benchmark various functions for their execution speeds to decide which is the fastest one.
//+------------------------------------------------------------------+ //| Macro to measure the execution time a function.                  | //| Prints the elapsed time in microseconds per call (µsec/call).    | //| TimeIt(sum += ArrayBsearch(arr, value));                         | //+------------------------------------------------------------------+ #define TimeIt(func_invocation) //+------------------------------------------------------------------+ //| Macro to execute a function for a fixed number of times.        | //| Prints the elapsed time in milliseconds (msec).                  | //| Benchmark(repeats, sum += ArrayBsearch(arr, value));             | //+------------------------------------------------------------------+ #define Benchmark(repeats, func_invocation) //+------------------------------------------------------------------+ //| Macro to execute a function for a fixed duration in msec.        | //| Prints the number of operations per second (ops/sec).            | //| Benchmark_opsec(msec, sum += ArrayBsearch(arr, value));          | //+------------------------------------------------------------------+ #define Benchmark_opsec(msec, func_invocation)
The library is based on public source codes of timeit module in pythonÂ
Here is an example script for usage:
//+------------------------------------------------------------------+ //|                                              benchmark_test.mq5 | //|                                        Copyright © 2018, Amr Ali | //|                            https://www.mql5.com/en/users/amrali | //+------------------------------------------------------------------+ #include <BenchmarkBenchmark.mqh> //+------------------------------------------------------------------+ //| The function returns integer numeric value closest from below.  | //+------------------------------------------------------------------+ double FastFloor(const double v)   {   double k = (double)(long)v;   return k - (v < k);   } //+------------------------------------------------------------------+ //|                                                                  | //+------------------------------------------------------------------+ void OnStart(void)   {   int repeats = 1e8;   Print("repeats=",repeats); //--- if result of the expression is not used, compiler optimizes out //--- (i.e., ignores) the function call.   double sum = 0;   Benchmark(repeats, sum += MathFloor(__i));   Benchmark(repeats, sum += FastFloor(__i));   Print("sum=",sum);   } //+------------------------------------------------------------------+ // sample output: /* repeats=100000000 sum+=MathFloor(__i) -> 599 msec sum+=FastFloor(__i) -> 138 msec sum=9999999922280040.0 */