JsonParserByLeo/Test/Ben/CJsonNodeBench.mq5

124 lines
4.9 KiB
MQL5
Raw Permalink Normal View History

2026-08-28 08:28:39 -05:00
//+------------------------------------------------------------------+
//| CJsonNodeBench.mq5 |
//| Copyright 2026, Niquel Mendoza |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Niquel Mendoza"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
2026-08-28 10:22:24 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#define LIBNAME "CJsonNode_MQL5Articles"
//#define JSONBENCH_RUN_PARSE
2026-08-28 08:28:39 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "Def.mqh"
#include "..\\Other\\CJsonNode.mqh"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
2026-08-28 10:22:24 -05:00
CJsonNode root;
#ifdef JSONBENCH_RUN_PARSE
root.__bjson = g_json_data; // One copy
ulong a = GetMicrosecondCount();
for(int i = 0; i < 1000; i++)
{
root.ParseString();
}
ulong b = GetMicrosecondCount();
Print("@", b - a);
#else
root.__bjson = g_json_test_access;
root.ParseString();
string keys[];
root.GetChild("wide_object").GetKeys(keys);
const int n = ArraySize(keys);
Xoshiro256 xo;
xo.Seed(JSONBENCH_ACCESO_XHOR_SEED);
double sump = 0.0, profit = 0.0;
long tin = 0;
2026-08-28 08:28:39 -05:00
2026-08-28 10:22:24 -05:00
ulong a = GetMicrosecondCount();
for(int i = 0; i < JSONBENCH_TOTAL_ITER_ACCESO; i++)
{
const string key = keys[xo.RandomInteger(0, n)];
root.GetChild("wide_object").GetChild(key);
}
ulong b = GetMicrosecondCount();
Sleep(100);
JSONBENCH_ACCES_CALL(JSONBENCH_TAGOP_ACCESO_WIDE)
a = GetMicrosecondCount();
for(int i = 0; i < JSONBENCH_TOTAL_ITER_ACCESO; i++)
{
root.GetChild("deep_object").GetChild("l1").GetChild("l2").GetChild("l3").GetChild("l4").GetChild("l5")
.GetChild("l6").GetChild("l7").GetChild("l8").GetChild("l9").GetChild("l10").GetChild("target").AsString();
}
b = GetMicrosecondCount();
Sleep(100);
JSONBENCH_ACCES_CALL(JSONBENCH_TAGOP_ACCESO_DEEP)
a = GetMicrosecondCount();
for(int i = 0; i < JSONBENCH_TOTAL_ITER_ACCESO; i++)
{
const int index = xo.RandomInteger(0, 10000);
tin += (long)root.GetChild("large_array").GetChild(index).AsNumber();
}
b = GetMicrosecondCount();
Sleep(100);
JSONBENCH_ACCES_CALL(JSONBENCH_TAGOP_ACCESO_LARGE_ARR)
2026-08-28 08:28:39 -05:00
2026-08-28 10:22:24 -05:00
a = GetMicrosecondCount();
for(int k = 0; k < 500; k++)
2026-08-28 08:28:39 -05:00
{
2026-08-28 10:22:24 -05:00
sump += root.GetChild("array_of_objects").GetChild(k).GetChild("price").AsNumber();
profit += root.GetChild("array_of_objects").GetChild(k).GetChild("profit").AsNumber();
tin += root.GetChild("array_of_objects").GetChild(k).GetChild("tags").ChildCount();
2026-08-28 08:28:39 -05:00
}
2026-08-28 10:22:24 -05:00
b = GetMicrosecondCount();
Sleep(100);
JSONBENCH_ACCES_CALL(JSONBENCH_TAGOP_ACCESO_MIX)
PrintFormat("sump=%.2f profit=%.2f tin=%d ", sump, profit, tin);
JSONBENCH_FINISH
#endif // JSONBENCH_RUN_PARSE
2026-08-28 08:28:39 -05:00
}
//+------------------------------------------------------------------+
2026-08-28 10:22:24 -05:00
/*
2026.08.28 09:50:47.335 UtilHeader (EURUSD,H1) [MultiBen& - $[parse|twitter.json|CJsonNode_MQL5Articles|1000]
2026.08.28 09:52:18.184 CJsonNodeBench (EURUSD,H1) @86409036
2026.08.28 09:52:42.871 UtilHeader (EURUSD,H1) [MultiBen& - $[parse|twitter.json|CJsonNode_MQL5Articles|1000]
2026.08.28 09:53:53.285 CJsonNodeBench (EURUSD,H1) [acceso-wide] Time: 526
2026.08.28 09:53:53.393 CJsonNodeBench (EURUSD,H1) [acceso-deep] Time: 265
2026.08.28 09:53:53.503 CJsonNodeBench (EURUSD,H1) [acceso-array-large] Time: 244
2026.08.28 09:53:53.612 CJsonNodeBench (EURUSD,H1) [acceso-mixed-trading] Time: 493
2026.08.28 09:53:53.612 CJsonNodeBench (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
2026.08.28 09:54:09.046 CJsonNodeBench (EURUSD,H1) [acceso-wide] Time: 555
2026.08.28 09:54:09.159 CJsonNodeBench (EURUSD,H1) [acceso-deep] Time: 351
2026.08.28 09:54:09.271 CJsonNodeBench (EURUSD,H1) [acceso-array-large] Time: 239
2026.08.28 09:54:09.384 CJsonNodeBench (EURUSD,H1) [acceso-mixed-trading] Time: 471
2026.08.28 09:54:09.384 CJsonNodeBench (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
2026.08.28 09:54:16.926 CJsonNodeBench (EURUSD,H1) [acceso-wide] Time: 522
2026.08.28 09:54:17.037 CJsonNodeBench (EURUSD,H1) [acceso-deep] Time: 230
2026.08.28 09:54:17.147 CJsonNodeBench (EURUSD,H1) [acceso-array-large] Time: 238
2026.08.28 09:54:17.257 CJsonNodeBench (EURUSD,H1) [acceso-mixed-trading] Time: 577
2026.08.28 09:54:17.257 CJsonNodeBench (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
*/