2026-06-29 14:22:15 -05:00 | | | //+------------------------------------------------------------------+
|
| | | //| ToyJson3.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 12:02:03 -05:00 | | | //+------------------------------------------------------------------+
|
| | | //| |
|
| | | //+------------------------------------------------------------------+
|
| | | #define JSONBENCH_RUN_PARSE
|
| | |
|
2026-06-29 14:22:15 -05:00 | | | //+------------------------------------------------------------------+
|
| | | //| |
|
| | | //+------------------------------------------------------------------+
|
| | | #include "..\\Other\\toyjson3.mqh"
|
2026-08-28 12:02:03 -05:00 | | | #include "Def.mqh"
|
| | |
|
| | | #define LIBNAME "ToyJson3"
|
| | |
|
2026-06-29 14:22:15 -05:00 | | | // Intente probarlo pero creo que es complejo dado que como usa punteros hacer 1000 iteraciones
|
| | | // Conllavea un monton de news y ademas necesitora elimianr todoss los objetos que crea en cada
|
| | | // iteracion lo cual no creo qeu sea justo
|
| | | // asi qeu probare noma "tokenize" qeu es una funcion previa a parse value..
|
| | | // por lo visto demora mucho.. asi qeu con eso creo qeu ya con seguridad
|
| | | // no creo que valha el esfuerzo estar reformando el parser para que no retorne punteros o aalgo asi..
|
| | |
|
| | | //+------------------------------------------------------------------+
|
| | | //| Script program start function |
|
| | | //+------------------------------------------------------------------+
|
| | | void OnStart()
|
| | | {
|
| | | //---
|
2026-08-28 12:02:03 -05:00 | | |
|
| | | #ifdef JSONBENCH_RUN_PARSE
|
2026-06-29 14:22:15 -05:00 | | | JsParser parser;
|
| | | parser.copy = g_json_data;
|
| | |
|
| | | ulong a = GetMicrosecondCount();
|
2026-08-28 12:02:03 -05:00 | | | for(int i = 0; i < 1000; i++)
|
2026-06-29 14:22:15 -05:00 | | | {
|
| | | parser.tokenize();
|
| | | }
|
2026-08-28 12:02:03 -05:00 | | | ulong b = GetMicrosecondCount();
|
| | | Print("@", b - a);
|
| | |
|
| | |
|
| | |
|
| | | #else // JSONBENCH_RUN_PARSE
|
| | |
|
| | | //--- Parseo unico (como con JAson, punteros no son problema para medir acceso)
|
| | | JsParser parser;
|
| | | parser.copy = g_json_test_access;
|
| | | JsValue *root = parser.parse(g_json_test_access);
|
| | |
|
| | | if(parser.error || root == NULL)
|
| | | {
|
| | | if(root != NULL)
|
| | | delete root;
|
| | | Print("Error parseando test.json con ToyJson3");
|
| | | return;
|
| | | }
|
| | |
|
| | | JsValue *wide = root["wide_object"];
|
| | | string keys[];
|
| | | wide.getProperties(keys);
|
| | | const int n = ArraySize(keys);
|
| | |
|
| | | //-- Random
|
2026-09-17 21:24:16 -05:00 | | | TSN::CRandom<Xoshiro256> xo;
|
2026-08-28 12:02:03 -05:00 | | | xo.Seed(JSONBENCH_ACCESO_XHOR_SEED);
|
| | |
|
| | | // init
|
| | | 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["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++)
|
| | | {
|
| | | string dummy = root["deep_object"]["l1"]["l2"]["l3"]["l4"]["l5"]["l6"]["l7"]["l8"]["l9"]["l10"]["target"].s;
|
| | | }
|
| | | 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["large_array"][index].get<long>();
|
| | | }
|
| | | b = GetMicrosecondCount();
|
| | |
|
| | | Sleep(100);
|
| | |
|
| | | JSONBENCH_ACCES_CALL(JSONBENCH_TAGOP_ACCESO_LARGE_ARR)
|
| | |
|
| | |
|
| | | a = GetMicrosecondCount();
|
| | |
|
| | | for(int k = 0; k < 500; k++)
|
| | | {
|
| | | sump += root["array_of_objects"][k]["price"].get<double>();
|
| | | profit += root["array_of_objects"][k]["profit"].get<double>();
|
| | | tin += root["array_of_objects"][k]["tags"].size();
|
| | | }
|
| | |
|
| | | b = GetMicrosecondCount();
|
| | |
|
| | | Sleep(100);
|
| | |
|
| | | JSONBENCH_ACCES_CALL(JSONBENCH_TAGOP_ACCESO_MIX)
|
| | |
|
| | |
|
| | | //----
|
| | | PrintFormat("sump=%.2f profit=%.2f tin=%d ", sump, profit, tin);
|
| | |
|
| | | //--- liberar el arbol creado por parse() (usa new internamente)
|
| | | delete root;
|
| | |
|
| | | //---
|
| | | JSONBENCH_FINISH
|
| | |
|
| | | #endif // JSONBENCH_RUN_PARSE
|
2026-06-29 14:22:15 -05:00 | | | }
|
| | | //+------------------------------------------------------------------+
|
2026-08-28 12:02:03 -05:00 | | | /*
|
| | | 2026.08.28 12:01:02.893 ToyJson3 (EURUSD,H1) @4486362
|
| | | 2026.08.28 12:01:10.131 ToyJson3 (EURUSD,H1) @4418494
|
| | | 2026.08.28 12:01:16.573 ToyJson3 (EURUSD,H1) @4422841
|
| | | 2026.08.28 12:01:25.067 ToyJson3 (EURUSD,H1) @4470388
|
| | |
|
| | |
|
| | | 2026.08.28 11:41:17.417 ToyJson3 (EURUSD,H1) [acceso-wide] Time: 333
|
| | | 2026.08.28 11:41:17.528 ToyJson3 (EURUSD,H1) [acceso-deep] Time: 179
|
| | | 2026.08.28 11:41:17.638 ToyJson3 (EURUSD,H1) [acceso-array-large] Time: 394
|
| | | 2026.08.28 11:41:17.749 ToyJson3 (EURUSD,H1) [acceso-mixed-trading] Time: 766
|
| | | 2026.08.28 11:41:17.749 ToyJson3 (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
|
| | | 2026.08.28 11:41:21.678 ToyJson3 (EURUSD,H1) [acceso-wide] Time: 328
|
| | | 2026.08.28 11:41:21.791 ToyJson3 (EURUSD,H1) [acceso-deep] Time: 382
|
| | | 2026.08.28 11:41:21.903 ToyJson3 (EURUSD,H1) [acceso-array-large] Time: 382
|
| | | 2026.08.28 11:41:22.015 ToyJson3 (EURUSD,H1) [acceso-mixed-trading] Time: 781
|
| | | 2026.08.28 11:41:22.015 ToyJson3 (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
|
| | | 2026.08.28 11:41:26.861 ToyJson3 (EURUSD,H1) [acceso-wide] Time: 329
|
| | | 2026.08.28 11:41:26.969 ToyJson3 (EURUSD,H1) [acceso-deep] Time: 116
|
| | | 2026.08.28 11:41:27.080 ToyJson3 (EURUSD,H1) [acceso-array-large] Time: 380
|
| | | 2026.08.28 11:41:27.190 ToyJson3 (EURUSD,H1) [acceso-mixed-trading] Time: 776
|
| | | 2026.08.28 11:41:27.190 ToyJson3 (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
|
| | | 2026.08.28 11:41:30.869 ToyJson3 (EURUSD,H1) [acceso-wide] Time: 330
|
| | | 2026.08.28 11:41:30.978 ToyJson3 (EURUSD,H1) [acceso-deep] Time: 192
|
| | | 2026.08.28 11:41:31.090 ToyJson3 (EURUSD,H1) [acceso-array-large] Time: 382
|
| | | 2026.08.28 11:41:31.200 ToyJson3 (EURUSD,H1) [acceso-mixed-trading] Time: 822
|
| | | 2026.08.28 11:41:31.200 ToyJson3 (EURUSD,H1) sump=537.48 profit=-337.50 tin=4925578
|
| | |
|
| | | */
|