Realización de un proyecto crowdsourced en Canvas - página 33

 
Реter Konow:

En ese ejemplo, la tasa de refresco es normal. Por eso no se ralentiza.

En el Administrador de Tareas veo Metatrader(32 bit)
¿Puede que la razón de tus retrasos esté relacionada con el tamaño de los bits?
Porque Metatrader ahora sólo está diseñado para x64.
Y según los desarrolladores, las versiones de 32 bits ya no se lanzarán.

¿Se ha resuelto el problema del procesamiento asíncrono de datos?
 
Roman:

Veo Metatrader (32 bits) en el Administrador de tareas
¿Tal vez, la razón de la lentitud está relacionada con la capacidad de dígitos de su sistema?
Pues bien, Metatrader está pensado ahora sólo para x64.
Y según los desarrolladores, las versiones de 32 bits ya no se lanzarán.

¿Y se ha resuelto el problema del procesamiento asíncrono de datos?

Confirmo que el ejemplo de Nikolai que mencioné sí carga la CPU al mover cualquiera de los objetos del ejemplo, especialmente si se hace rápidamente. La carga aumenta un 35-40%. La prueba se realizó con un procesador de 64 bits, Windows 7 de 64 bits y MT5 de 64 bits.

¿Qué se entiende por procesamiento asíncrono en nuestro debate?

 
Roman:

Puedo ver Metatrader (32 bits) en el Administrador de tareas.
¿Tal vez, la razón de sus retrasos radica en la capacidad de dígitos de bits del sistema?
De hecho, Metatrader está ahora personalizado sólo para x64.
Y según los desarrolladores, las versiones de 32 bits ya no se lanzarán.

¿Y se ha resuelto el problema del procesamiento asíncrono de datos?

Todos estos ejemplos son en MT4.

MT5 tira mucho más, pero con un redibujado erróneo (por ejemplo, una taza) también carga el procesador (lo he comprobado). El problema está en la frecuencia y el área de redistribución, que debería reducirse por todos los medios. Si necesitas redibujar una celda, entonces es la única celda. De lo contrario es un desperdicio de recursos, (si por ejemplo una celda necesita ser redibujada 10 veces por segundo, entonces redibujar todo el lienzo "matará" al procesador y será poco realista). Sin embargo, ya está claro.

Déjeme explicarle. Una celda de la tabla tiene tres objetos: base, texto e icono. Si el contenido de una celda cambia, tenemos que hacer tres bucles del lienzo. En el primer ciclo redibujamos la base, en el segundo - el texto, en el tercero - el icono. Es como si hubiéramos triplicado el área de la célula. Si sigues redibujando todo el kanvas en esta línea, obtendrás una grave ralentización. Por lo tanto, debe tener en cuenta el número de ciclos en el área del lienzo que se va a redibujar. Puede que no se vea en las primitivas simples, pero se hace evidente en los elementos complejos. Algunos elementos comprenden 10 objetos(una caja de entrada con botones o una lista de salida o una plataforma de ventana) y es posible calcular cuántos ciclos en un array de kanvas deben hacerse al repintarlos. Afortunadamente, este redibujado no requiere una alta tasa de repetición.

El problema del procesamiento asíncrono no se ha resuelto. Hubo algunas ideas, pero aún no se ha encontrado ninguna solución.

En general, si vamos a crear una interfaz gráfica de usuario en el lienzo, debemos hacerla con elementos redibujables por separado. De lo contrario, el programa alcanzará rápidamente el límite y, a partir de entonces, los retrasos en las operaciones sencillas serán notables.

 
Алексей Барбашин:

¿Qué se entiende por procesamiento asíncrono de datos en nuestro debate?

Pues como yo lo entiendo en palabras sencillas, asíncrono (persecución de recursos) o multihilo (recurso dedicado).
No he mirado el código de los ejemplos de Nikolay pero debido a la ausencia de asincronía y multihilo enMetatrader el código de redibujado de píxeles se ejecuta de forma sincrónica.
Y lo más probable es que el procesamiento de los datos de salida de Petera se realice también de forma sincrónica. Y en ambos casos es probable que todo esto se siga procesando en ciclos.
Esto aumenta la carga del procesador. Para una respuesta rápida con menos carga a la vez, el procesamiento de datos y el redibujado deben ir en paralelo.

 
Roman:

Bueno, según entiendo en palabras sencillas, asíncrono (carrera de recursos) o multithreading (recurso dedicado).
No he mirado el código de los ejemplos de Nikolay pero debido a la ausencia de asincronía y multihilo enMetatrader el código de redibujado de píxeles se ejecuta de forma sincrónica.
Y lo más probable es que el procesamiento de los datos de salida de Petera se realice también de forma sincrónica. Y en ambos casos, es probable que todo esto se procese en bucles.
Esto aumenta la carga del procesador. Para una respuesta rápida con menos carga a la vez, el procesamiento de datos y el redibujado deben ir en paralelo.

En realidad no)) Aclaro: tengo el motor conectado a la aplicación del usuario a través de un recurso. Es decir, - la aplicación de usuario hace sus cálculos en su hilo, y pasa los datos al motor (que lleva la GUI), que puede estar en un gráfico diferente. Maneja los eventos de los parámetros y los envía a la GUI. En otras palabras, el procesamiento se divide en dos hilos. Sin embargo, este no será el caso en el constructor que publicaré. La aplicación incluirá el motor dentro de sí misma y todo estará en un hilo. Pero la carga del procesador será la misma. La dependencia de la velocidad con respecto a la secuencia de funciones será simplemente mayor.

 
Реter Konow:

En realidad no)) Aclaro: tengo el motor conectado a la aplicación del usuario a través de un recurso. Es decir, - la aplicación de usuario hace sus cálculos en su hilo, y pasa los datos al motor (que lleva la GUI), que puede estar en un gráfico diferente. Maneja los eventos de los parámetros y los envía a la GUI. En otras palabras, el procesamiento se divide en dos hilos. Sin embargo, este no será el caso en el constructor que publicaré. La aplicación incluirá el motor dentro de sí misma y todo estará en un hilo. Pero la carga del procesador será la misma. La dependencia de la velocidad de la secuencia de ejecución de las funciones será simplemente mayor.

Aquí vamos de nuevo... promesas, anuncios, charlas.

incluso ya olvidado - "kernel-engine" se publicó como un software decente ? o como una mierda en forma de archivos adjuntos a los comentarios

 
Roman:

Pues según entiendo en términos sencillos, asíncrono(carrera de recursos) o multihilo(recurso dedicado).
No he mirado el código de los ejemplos de Nikolai, pero debido a la ausencia de asincronía y multihilo enMetatrader, el código de redibujado de píxeles se ejecuta de forma sincrónica.
Y lo más probable es que el procesamiento de los datos de salida de Petera se realice también de forma sincrónica. Y en ambos casos, es probable que todo esto se procese en bucles.
Esto aumenta la carga del procesador. Para una respuesta rápida con menos carga a la vez, el procesamiento de datos y el redibujado deben ir en paralelo.

Todas las operaciones en MT son estrictamente sincrónicas y esto no puede cambiarse realmente a menos que los desarrolladores añadan hilos a la aplicación.

Es bastante sorprendente que los desarrolladores traten de ampliar la funcionalidad de MT en términos de trabajo con bases de datos, con python, con sharpe... pero ofrecen hacerlo todo en el mismo hilo... Es simplemente increíble.

 
Maxim Kuznetsov:

aquí vamos de nuevo ... promesas, anuncios, charlas

Incluso se me olvidaba - ¿se publicó el "kernel-engine" como un software decente? o como una porquería, como adjuntos a los comentarios

Bien por ti. Me inspira luchar con gente como tú, y siempre pierden)). Me estás dando energía y no te das cuenta.

 
Maxim Kuznetsov:

aquí vamos de nuevo... promesas, anuncios, charlas

Incluso se me olvidaba - ¿se publicó el "kernel-engine" como un software decente? o como una mierda en forma de adjuntos a los comentarios

Max, sé discreto.

 
Реter Konow:

En realidad no)) Aclaro: tengo el motor conectado a la aplicación del usuario a través de un recurso. Es decir, - la aplicación de usuario hace sus cálculos en su hilo, y pasa los datos al motor (que lleva la GUI), que puede estar en un gráfico diferente. Maneja los eventos de los parámetros y los envía a la GUI. En otras palabras, el procesamiento se divide en dos hilos. Sin embargo, este no será el caso en el constructor que publicaré. La aplicación incluirá el motor dentro de sí misma y todo estará en un hilo. Pero la carga del procesador será la misma. Sólo que la dependencia de la velocidad de la secuencia de funciones será mayor.

Entiendo el punto, aplicación por separado, GUI por separado.
Pero el procesamiento de los datos de salida en la GUI se realiza de forma sincrónica de todos modos.
Por ejemplo, la aplicación envía 10000 elementos a GUI y GUI procesa todos estos elementos secuencialmente.
Este es el problema. Es necesario paralelizar el procesamiento de los elementos entrantes y su salida en la GUI. Base, texto, icono.
Además, hay tres ciclos por célula.

Razón de la queja: