//+------------------------------------------------------------------+ //| 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 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #define JSONBENCH_RUN_PARSE //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #include "..\\Other\\toyjson3.mqh" #include "Def.mqh" #define LIBNAME "ToyJson3" // 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() { //--- #ifdef JSONBENCH_RUN_PARSE JsParser parser; parser.copy = g_json_data; ulong a = GetMicrosecondCount(); for(int i = 0; i < 1000; i++) { parser.tokenize(); } 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 Xoshiro256 xo; 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(); } 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(); profit += root["array_of_objects"][k]["profit"].get(); 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.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 */