Galería de interfaces de usuario escritas en MQL - página 57
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
@Nikolai Semko
Nikolai, ahora llegó inesperadamente la respuesta a la pregunta de"por qué se tarda tanto en dibujar un lienzo".
Las ventanas constan de dos lienzos! Estos lienzos son casi iguales en tamaño. Así que el área de dibujo debe multiplicarse por dos. Pero eso es sólo el principio.
En el espacio de la ventana hay grandes elementos de desplazamiento (V_BOX), que también se dibujan completamente llenos del color original. Es decir, si V_BOX ocupa la parte principal de la ventana, el área de dibujo debería multiplicarse por tres. Pero! tiene un lienzo adicional. La imagen se desplaza sobre ese lienzo. La base del elemento es sólo una barra de desplazamiento. En resumen - el área de dibujo debería multiplicarse por cuatro (especialmente si la barra de desplazamiento es larga). Y sólo entonces, los elementos se dibujan.
Parecería que es todo... Podemos poner un punto.Multiplicamos el área de la ventana por tres o cuatro. Pero ¡no!
Lospropios elementos también tienen varias capas. Cada uno tiene una base. La base se dibuja siempre desde cero, rellenada con el color original. Después se dibujan los marcos sobre la base. A continuación, los iconos se dibujan encima de las partes ya dibujadas del elemento. Y por último, los textos se dibujan encima de todo.
Como resultado, el usuario sólo ve el color final en cada píxel concreto. Pero en el lugar de este píxel los colores cambian varias veces a medida que se dibuja toda la ventana.
Ahora multiplique esto por 15 ventanas.... Queda claro que no hay ningún fallo especial en el código - he medido especialmente la velocidad de ejecución de partes del bloque de dibujo, y 50 ms para una pantalla completa también me funciona. Es sólo que termino con muchas más pantallas.
Tengo una idea de cómo cambiar el código y acelerar el dibujo en 2 o 3 veces. Pero lo haré después del trabajo principal.
Quiero darte las gracias por insistir en revisar el código. Tenías razón. Ese es el caso cuando la crítica fue útil.
También, gracias a @AndreyBarinov por la pista con el texto. Quizá se me ocurra algo.
@Nikolai Semko
...y 50ms a pantalla completa también me funciona. ....
La prueba es aproximada. Medí la velocidad de apertura de una ventana con tres lienzos de tamaño casi igual (ventana de iconos) y obtuve ~70 ms. Si se suma el área de todos los lienzos (sin elementos), a continuación, sólo sobre el área de la pantalla del portátil de 17 ". Esto no incluye el área de la base de los elementos y los propios iconos, que se dibujaron en la parte superior del lienzo. Así que sí, ~50ms para llenar de color el área de una pantalla completa teórica. Aún no lo he medido con exactitud. ¿Por qué, si el "elefante" está justo en medio de la habitación? :)
Hablaba de 50 ms como interfaz sobrecargada y no optimizada. 3-10 ms es normal
Eres como Stirlitz que no quería ir al campo de patatas.
Es necesario un estudio en profundidad de los ciclos dentro del bloque de dibujo. Un perfil superficial no da una imagen completa. Pero ya está claro de qué se trata. Escribí aquí #553
. Creo que no me equivoco.
(versión preliminar del bloque de dibujo, que utilizo para las pruebas)...
Tengo una idea de cómo cambiar el código y acelerar la representación de 2 o 3 veces. Pero lo haré después del trabajo principal ...
Analicé la complejidad de la tarea y el valor del resultado final.
Sí, lo más importante es sacar primero un software totalmente funcional.