Lienzo vs. Etiquetas - página 13

 
Nikolai Semko:

Ah, bueno, entonces es normal en absoluto.
También tengo un lienzo en mi gif, y es el panel que menos recursos consume, porque no tengo que redibujarlo tan a menudo y captar el momento en que entra una nueva barra.

¡Genial! ¡Todo está volando!

Y a baja velocidad, se actualiza sin saltarse el ritmo.
 
Dmitry Fedoseev:
Encontré los archivos correctos. No está claro dónde, dónde y cuándo mirar los números, pero incluso sin eso se puede ver que el lienzo es mucho más lento, y no es sólo un lienzo en lugar de un lebble, sino un lienzo en lugar de un montón de etiquetas.

Ejecute el experto CanvasVsLabels.mq5, seleccione el tipo de visualizaciónoutType, habilite limit_fps, establezca, nIterations, es 10000 por defecto. Esto es suficiente, no es necesario cambiarlo. Entonces los resultados serán similares a los presentados aquí: https://www.mql5.com/ru/forum/364640/page11#comment_21301589.

Ahora los resultados. Min delay,Mid delay yMax delay son los retrasos mínimo, medio y máximo, respectivamente, de una ejecución. Total, es el tiempo total para el número total denIteraciones pasa.

Una vez más, he aquí una tabla con losresultados de la comparación

Lienzo sin límite de fps Lienzo limitado fps Etiquetas fps ilimitado Etiquetas fps limitado
Retraso mínimo (μs) 1530 1 18 0
Retardo medio (μs) 7674 4086 48 7
Retardo máximo (μs) 11967 11093 785 286
Total (μs) 77727510 29452299 39648984 27439654


Se pueden realizar exactamente las mismas mediciones en el probador, ya que el examinador está diseñado para ello. Pero aún no los he hecho. Lo haré cuando tenga tiempo libre. Tengo previsto experimentar con un despliegue de muchas BitmabLabels en el futuro.

 

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Lienzo vs. Etiquetas

fxsaber, 2021.03.13 19:26

¿Soy el único con este tipo de resultado?

fxsaber:

Se lleva el 15-20%. Al parecer, mi tarjeta de vídeo es demasiado lenta.

Resulta que ResourceReadImage es muy lento. Me deshice de él - tengo cero carga.

 

De nuevo publico la tabla comparativa, pero esta vez con histogramas.

Lienzo sin límite de fps Lienzo limitado fps Etiquetas fps ilimitado Etiquetas fps limitado
Retraso mínimo (μs) 1530 1 18 0
Retardo medio (μs) 7674 4086 48 7
Retardo máximo (μs) 11967 11093 785 286
Total (μs) 77727510 29452299 39648984 27439654


Comparación de los valores de retraso medio por pase

Medio retardo

Que por alguna razón no eran comparables con el tiempo total de ejecución (Total)...

Comparación del tiempo total de funcionamiento

Total

Las mediciones mostraron que la visualización basada en Canvas con FPS limitados (Canvas unlimited FPS) es ligeramente más lenta que la visualización basada en etiquetas con FPS limitados(Labels unlimited FPS). Pero, en general, ambos son adecuados para mostrar información de procesos muy cargados.

Cómo ejecutar el Asesor Experto para tomar medidas

Parámetros de entrada

  1. Seleccione outType en la lista desplegable Lienzo o Etiquetas
  2. Activar o desactivar limit_fps.
  3. Confirme su selección
  4. Pulse el botón de inicio para comenzar las mediciones en el gráfico

Medidas iniciales

El Asesor Experto puede tomar medidas en el comprobador visual exactamente de la misma manera. Sin embargo, el intervalo de fechas debe establecerse en la configuración del comprobador de forma que haya al menos tantas barras en el historial como el valor del parámetro de entradanIterations.

Puede encontrar más información, así como las fuentes, en la descripción de la biblioteca Chart Display:https://www.mql5.com/ru/code/33898

Biblioteca especialmente modificada para las mediciones:https://www.mql5.com/ru/code/download/33898/chartdisplay.mqh

Experto universal para la medición:https://www.mql5.com/ru/code/download/33898/canvasvslabels.mq5

Para más detalles, consulte la base de datos: https://www.mql5.com/ru/code/33898


Me gustaría añadir más medidas correctas, realizadas con el nuevo Expert Advisor en el primer post de este hilo. Ya que esas medidas, que están ahí en este momento, no son correctas. Pero el primer mensaje, lamentablemente, ya no se puede editar. Pido a los moderadores que añadan más medidas correctas al principio, y que marquen las que hay ahora como irrelevantes.

Дисплей с оптимизацией для вывода текста в чарт по типу консоли
Дисплей с оптимизацией для вывода текста в чарт по типу консоли
  • www.mql5.com
Данная библиотека позволяет создавать дисплеи для удобного вывода текстовой информации в чарт с наиболее оптимальной скоростью
 
fxsaber:

Resulta que ResourceReadImage es muy lento. Me deshice de él - cero carga.

¿En serio?
Una sorpresa para mí.
¿Cuánto más lento que copiar un array uint ordinario del mismo tamaño?
 
Mihail Matkovskij:

Ejecución del experto CanvasVsLabels.mq5...

¿Qué sentido tiene? No quiero indagar en el código ahora mismo. ¿Cómo se calculan estos valores? Si se realizan pruebas en el probador, se debe medir el tiempo total empleado en la ejecución y nada más, pero no el rendimiento de los fragmentos de código individuales. En el caso extremo, no cuente el inite. Y he aquí que sin mediciones se puede ver que el kanvas es más lento. No sé, tal vez tengo algún tipo de anomalía...

 
Nikolai Semko:
¿De verdad?
Una sorpresa para mí.
¿Cuánto más lento que copiar un array uint normal del mismo tamaño?

Con la llamada era alrededor del 15% de carga, sin - cero.

 
Dmitry Fedoseev:

¿Qué sentido tiene? No quiero indagar en el código ahora mismo. ¿Cómo se calculan estas cifras? Si realizas las pruebas en el probador así, debes medir el tiempo total de la ejecución y nada más, y no el rendimiento de los fragmentos de código por separado. En el caso extremo, no cuente el inite. Y he aquí que sin mediciones se puede ver que el kanvas es más lento. No sé, tal vez tengo algún tipo de anomalía...

No quiero indagar en el código. Tampoco quiero creer en mi palabra. :) No sé cómo explicártelo. Contando de principio a fin cómo escribí todo el código... Eso daría para un artículo entero. :)

Y no hay que entender en absoluto cómo hace las mediciones un experto.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void run() {
  MqlRates rates[];
  int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
  ulong start, min, mid, max;
  ulong last, delay; 
  static ulong totalDelays = 0;
  static int nTick = 0;
  ulong first;
  if (!triggerBtn.State())
    return;
  start = GetMicrosecondCount();
  min = INT_MAX; mid = 0; max = 0;
  if (CopyRates(NULL, PERIOD_CURRENT, 0, nIterations, rates) != nIterations) {
    triggerBtn.State(false);
    triggerBtn.setText("Start");
    Print("Not enough quotes!");
    Comment("Not enough quotes!");
    return;
  }
  for (int i = nIterations - 1; i >= 0 && triggerBtn.State(); i--) {
    first = GetMicrosecondCount();
    
    display.push();
    display.setText(concatenate(i));
    display.update();
    
    last = GetMicrosecondCount();
    delay = last - first;
    if (delay < min)
      min = delay;
    if (delay > max)
      max = delay;
    nTick++;
    totalDelays += delay;
    mid = totalDelays / nTick;
    Comment("Min delay: " + (string)min + " μs\n"
            "Mid delay: " + (string)mid + " μs\n"
            "Max delay: " + (string)max + " μs\n"
            "Total: " + (string)(GetMicrosecondCount() - start) + " μs" + " \n"
            "Completed: " + (string)(int)(100.0 / nIterations * (nIterations - i)) + "%");
  }
  
  printf("Min delay: %d μs", min);
  printf("Mid delay: %d μs", mid);
  printf("Max delay: %d μs", max);
  printf("Total: %d μs", GetMicrosecondCount() - start);
  triggerBtn.State(false);
  triggerBtn.setText("Start");
  ChartRedraw();
}
El total se calcula al final del bucle y el mínimo, el medio y el máximo en el cuerpo del bucle, después de display.push, display.setText y display.update. Nada complicado, si te sientas y miras bien todo, puedes llegar al menos al código fuente de Kanvas y Labels. Por cierto, tampoco hay nada complicado. Excepto los métodos que dibujan curvas Bezier y similares en Kanvas.
 
Dmitry Fedoseev:

Y aquí, sin medidas, se puede ver que el kanvas es más lento. No sé, tal vez tengo algún tipo de anomalía...

Tienes que decirme a qué parámetros de entrada Kanvas es lento. Si limit_fps: false, entonces es obvio... :)

 
fxsaber:

Resulta que ResourceReadImage es muy lento. Me deshice de él y no tengo carga.

Si se lee desde un recurso guardado en tiempo de compilación, hay que hacerlo una vez.

Los recursos se comprimen en tiempo de compilación.

Razón de la queja: