performance_mode

0 Views
0 Downloads
0 Favorites
performance_mode
ÿþ//+------------------------------------------------------------------+

//|                                             performance_mode.mq5 |

//|                                        Copyright © 2024, Amr Ali |

//|                             https://www.mql5.com/en/users/amrali |

//+------------------------------------------------------------------+



// optionally adjust performance via #defines before #include



// enable performance mode for library

//#define TIMEUTILS_PERFORMANCE_MODE

#include "TimeUtils.mqh"



#define BENCHSIZE 30000000



void OnStart()

  {

   datetime t[];  // array of random dates for testing

   ArrayResize(t, BENCHSIZE);

   for(int i = 0; i < BENCHSIZE; i++)

      t[i] = datetime((((ulong)rand()<<60)|((ulong)rand()<<45)

                       |((ulong)rand()<<30)|((ulong)rand()<<15)

                       |(ulong)rand())%(ulong(365)*130*3600*24));

   Print("Processing random times " + (string)t[ArrayMinimum(t)] + " - " + (string)t[ArrayMaximum(t)]);





   bool res = false; // Testing performance

   ulong tt = GetMicrosecondCount();

   for(int i = 0; i < BENCHSIZE; i++)

      res |= (bool)(StartOfMonth(t[i]) + EndOfMonth(t[i]));   // both are calling TimeToStruct and StructToTime, internally.

   tt = GetMicrosecondCount()-tt;



   Print(StringFormat("%5.2f", tt*1000.0/BENCHSIZE) + " ns per call, result = " + string(res));

  }

//+------------------------------------------------------------------+



/*

 example output with TIMEUTILS_PERFORMANCE_MODE



 Processing random times 1970.01.01 00:00:15 - 2099.11.29 23:56:41

  9.69 ns per call, result = true



*/

Comments