Errores, fallos, preguntas - página 977

 
Renat:
No se llama a ningún método GDI.

Me refiero a TextOut. ¿No es un sistema?

Entiendo lo de la etiqueta, no lo asocio con GDI de ninguna manera

 
voix_kas:

El texto cambia en todas (la mitad) de las etiquetas diseñadas para mostrar el valor del indicador, no su descripción. Esto se puede ver al ejecutar el script.

O no te entiendo. ¿De qué línea estamos hablando exactamente?

Lo siento, me he equivocado de sitio desde el móvil y me he equivocado.

Haré mis propias pruebas en las próximas horas y publicaré el código fuente y los resultados detallados.

 
sergeev:

Me refiero a TextOut. ¿No es un sistema?

Entiendo lo de la etiqueta, no lo asocio con GDI de ninguna manera

Pensaba que con GDI se trataba de etiquetas.

La modificación de los parámetros de las etiquetas no es otra cosa que meter masivamente el flujo de comandos en una cola dedicada sin que se añadan realmente esos datos a los objetos reales (los objetos pertenecen al gráfico, no a MQL5), hasta que los datos del objeto se rendericen o se lean de nuevo. Es decir, la modificación real de los objetos se pospone. Hemos aplicado esta optimización a propósito para que los desarrolladores puedan trabajar con decenas de miles de objetos sin que se produzcan ralentizaciones.

Es decir, al modificar los objetos se retrasa la ejecución real, lo que da una sensación de rapidez. Bueno y toda la carga de dibujo se lleva en el hilo de la interfaz (gráfica) de la aplicación. Y a la hora de renderizar, funcionan métodos de optimización y recorte de los límites de visibilidad, lo que permite trabajar normalmente con 300 000-500 000 objetos por gráfico.

Pero cuando se trabaja con mapas de bits, todo el trabajo se hace en MQL5 a la vez, sin ningún retraso, pero después se hace instantáneamente al renderizar. Y el tiempo total de "modificación + renderización" de un mapa de bits es probablemente más rápido para un número determinado de objetos. Especialmente teniendo en cuenta el hecho de que el mapa de bits se guarda entre las llamadas y sólo puede terminar de dibujar sólo lo que necesita, en lugar de reconstruir todo el lienzo.

Haré pruebas detalladas y publicaré los resultados que muestren cómo se comportan los objetos y los mapas de bits en diferentes modos.

 

He publicado los resultados en otro hilo: Pruebas de rendimiento de las etiquetas de texto único y los mapas de bits en un gráfico

El autor tenía un grave error en su script de manejo de mapas de bits: en realidad utilizaba dos mapas de bits en lugar de uno y los copiaba constantemente entre sí, lo que reducía el rendimiento.

 
Renat:

He publicado los resultados de la prueba en otro hilo: Prueba de rendimiento de las etiquetas de texto único y los mapas de bits en un gráfico

El autor tenía un grave defecto en su guión al trabajar con mapas de bits: en realidad utilizaba dos mapas de bits en lugar de uno y los copiaba constantemente uno dentro del otro, lo que reducía el rendimiento.

¿Así que la forma de acelerar la producción real es un defecto? :)

Ya he descrito aquí antes el propósito por el que se introdujeron el lienzo de la plantilla y el lienzo de trabajo.

 

Vivamos mucho tiempo.

El manual de MQL5 dice que el tipo de fecha es https://www.mql5.com/ru/docs/basis/types/integer/datetime:

" Rango de valores del 1 de enero de 1970 al 31 de diciembre de 3000. "

en realidad el valor máximo en 32535244799 es 3001.01.01 07:59:59

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип datetime - Документация по MQL5
 
La prueba se basa en el rendimiento, por lo que no debería atascarse con operaciones adicionales.
 

Para mejorar la pureza de la programación me gustaría preguntar al público sobre esto.

Supongamos que hay una bandera (bool Flag) declarada globalmente. Cuando se producen determinados eventos/condiciones, debe establecerse un valor determinado.

La primera variante:

if (некое условие) {
  Flag = false;
}

Segunda opción:

if (некое условие) {
  if (Flag) Flag = false;
}

Qué opción:

1. ¿más rápido en términos de rendimiento?

2. Si se me permite decirlo, ¿"más profesional"?

Se supone que esta sección de código se controlará con bastante frecuencia, por ejemplo, cada tick.

 
voix_kas:

Para mejorar la pureza de la programación me gustaría preguntar al público sobre esto.

Supongamos que hay una bandera (bool Flag) declarada globalmente. Cuando se producen algunos eventos/condiciones, su valor debe establecerse.

Por supuesto, la primera variante es más rápida. Menos instrucciones y una comparación/ramificación menos.
 
Renat:
Por supuesto, la primera opción es más rápida. Menos instrucciones, y también una comparación/ramificación menos.
Gracias.