| //+------------------------------------------------------------------+
|
| //| BenJsonLib.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
|
|
|
| #define JSONBENCH_RUN_PARSE
|
|
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| #include <JsonLib\\JsonLib.mqh>
|
| #include "Def.mqh"
|
|
|
| #define LIBNAME "MQL5-JsonLib"
|
| //+------------------------------------------------------------------+
|
| //| Script program start function |
|
| //+------------------------------------------------------------------+
|
| void OnStart()
|
| {
|
| //---
|
| #ifdef JSONBENCH_RUN_PARSE
|
| MQL5_Json::JsonError error;
|
| MQL5_Json::JsonParseOptions opts;
|
| opts.engine = MQL5_Json::ENGINE_HIGH_SPEED;
|
|
|
| //---
|
| MQL5_Json::Internal::CJsonRapidParser rapid_parser;
|
| rapid_parser.m_text = g_json_data; // one copy
|
| rapid_parser.m_text_len = StringLen(g_json_data);
|
|
|
| //---
|
| Sleep(1000);
|
|
|
| //---
|
|
|
| ulong a = GetMicrosecondCount();
|
| for(int i = 0; i < 1000; i++)
|
| {
|
| rapid_parser.ParseToTapeFast(opts, error);
|
|
|
| MQL5_Json::Internal::CJsonDocument doc_impl; // o como corresponda instanciar
|
| MQL5_Json::Internal::CDomBuilder dom_builder;
|
| dom_builder.BuildFromTape(GetPointer(doc_impl), rapid_parser.m_tape, g_json_data);
|
| }
|
| ulong b = GetMicrosecondCount() - a;
|
| Print("@", b);
|
| #else // JSONBENCH_RUN_PARSE
|
| MQL5_Json::JsonError error;
|
| MQL5_Json::JsonParseOptions opts;
|
| MQL5_Json::JsonDocument doc = MQL5_Json::JsonParse(g_json_test_access, error, opts);
|
| MQL5_Json::JsonNode root = doc.GetRoot();
|
|
|
| string keys[];
|
| root.Get("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;
|
|
|
| ulong a = GetMicrosecondCount();
|
| for(int i = 0; i < JSONBENCH_TOTAL_ITER_ACCESO; i++)
|
| {
|
| const string key = keys[xo.RandomInteger(0, n)];
|
| root.Get("wide_object")[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.Get("deep_object").Get("l1").Get("l2").Get("l3").Get("l4").Get("l5")
|
| .Get("l6").Get("l7").Get("l8").Get("l9").Get("l10").Get("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 += root.Get("large_array").At(index).AsInt(0);
|
| }
|
| b = GetMicrosecondCount();
|
| Sleep(100);
|
| JSONBENCH_ACCES_CALL(JSONBENCH_TAGOP_ACCESO_LARGE_ARR)
|
|
|
| a = GetMicrosecondCount();
|
| for(int k = 0; k < 500; k++)
|
| {
|
| sump += root.Get("array_of_objects").At(k).Get("price").AsDouble(0.0);
|
| profit += root.Get("array_of_objects").At(k).Get("profit").AsDouble(0.0);
|
| tin += root.Get("array_of_objects").At(k).Get("tags").Size();
|
| }
|
| 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 09:26:20.971 BenJsonLib (EURUSD,H1) [acceso-wide] Time: 229
|
| 2026.08.28 09:26:21.083 BenJsonLib (EURUSD,H1) [acceso-deep] Time: 1114
|
| 2026.08.28 09:26:21.196 BenJsonLib (EURUSD,H1) [acceso-array-large] Time: 409
|
| 2026.08.28 09:26:21.308 BenJsonLib (EURUSD,H1) [acceso-mixed-trading] Time: 1141
|
| 2026.08.28 09:26:21.308 BenJsonLib (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
|
| 2026.08.28 09:26:28.306 BenJsonLib (EURUSD,H1) [acceso-wide] Time: 230
|
| 2026.08.28 09:26:28.418 BenJsonLib (EURUSD,H1) [acceso-deep] Time: 1028
|
| 2026.08.28 09:26:28.527 BenJsonLib (EURUSD,H1) [acceso-array-large] Time: 434
|
| 2026.08.28 09:26:28.639 BenJsonLib (EURUSD,H1) [acceso-mixed-trading] Time: 1176
|
| 2026.08.28 09:26:28.639 BenJsonLib (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
|
| 2026.08.28 09:26:33.302 BenJsonLib (EURUSD,H1) [acceso-wide] Time: 227
|
| 2026.08.28 09:26:33.414 BenJsonLib (EURUSD,H1) [acceso-deep] Time: 1022
|
| 2026.08.28 09:26:33.526 BenJsonLib (EURUSD,H1) [acceso-array-large] Time: 442
|
| 2026.08.28 09:26:33.636 BenJsonLib (EURUSD,H1) [acceso-mixed-trading] Time: 984
|
| 2026.08.28 09:26:33.636 BenJsonLib (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
|
| 2026.08.28 09:34:19.945 BenJsonLib (EURUSD,H1) @2160719
|
| 2026.08.28 09:34:29.912 BenJsonLib (EURUSD,H1) @2118729
|
| 2026.08.28 09:36:20.789 BenJsonLib (EURUSD,H1) @12879
|
| 2026.08.28 09:37:24.614 BenJsonLib (EURUSD,H1) @17595195
|
| 2026.08.28 09:39:02.251 UtilHeader (EURUSD,H1) [MultiBen& - $[parse|twitter.json|MQL5-JsonLib|1000]
|
| 2026.08.28 09:39:28.038 BenJsonLib (EURUSD,H1) @17547384
|
| 2026.08.28 09:39:51.584 BenJsonLib (EURUSD,H1) @17760505
|
| 2026.08.28 09:40:04.740 UtilHeader (EURUSD,H1) [MultiBen& - %[MQL5-JsonLib]
|
|
|
| */ |