Optimizar la lógica. Por ejemplo, trabajar con matrices y bucles. Intenta empaquetar los valores de los criterios en un array. Y hacer comprobaciones en bucle. Tal vez no sea necesario en 74 mil casos entonces...
Por supuesto, en teoría, se puede generar cada cadena mediante un hash largo, y pasar sólo estos hashes, y luego usarlo para generar todo - pero no estoy seguro de que esto sea rápido y la tarea no es sencilla...
1. allí verás los lugares más "lentos" del código. Aunque... otra cuestión es que afecte a la compilación...
2. Como quieras: puedes utilizar el caso. Se le aconsejó que lo dividiera en pequeñas funciones. Desmóntalo y pruébalo. Sí, por supuesto, el código se hará más grande. Pero qué hacer.
Y aquí he reescrito el código en funciones - en el apéndice.
Me he dado cuenta enseguida de que el código anterior ocupaba 14428 kb tras la compilación y el nuevo 9447 kb - ya me sorprende la diferencia de 5 Mbytes - ¡de dónde!
Más adelante, por la velocidad de compilación, la primera
0 error(s), 0 warning(s), 2109302 msec elapsed
nueva versión
0 error(s), 0 warning(s), 386131 msec elapsed
La nueva versión es 5,46 veces más rápida de compilar.
Y aquí está la versión anterior en términos de velocidad:
2019.10.1514:35:47.593 Core 1 pass 0 returned result 1001000.000000in0:00:29.5552019.10.1514:35:47.595 Core 3 pass 4 returned result 1001000.000000in0:00:29.4902019.10.1514:35:47.605 Core 2 pass 2 returned result 1001000.000000in0:00:29.5402019.10.1514:35:47.641 Core 4 pass 6 returned result 1001000.000000in0:00:29.5412019.10.1514:36:15.511 Core 2 pass 3 returned result 1001000.000000in0:00:27.9072019.10.1514:36:15.523 Core 1 pass 1 returned result 1001000.000000in0:00:27.9322019.10.1514:36:15.535 Core 3 pass 5 returned result 1001000.000000in0:00:27.9422019.10.1514:36:15.537 Core 4 pass 7 returned result 1001000.000000in0:00:27.8972019.10.1514:36:15.537 Tester optimization finished, total passes 82019.10.1514:36:15.547 Statistics optimization done in0 minutes 58 seconds
2019.10.1514:36:15.547 Statistics shortest pass 0:00:27.897, longest pass 0:00:29.555, average pass 0:00:28.7252019.10.1514:36:15.547 Statistics 8000 frames (3.14 Mb total, 412 bytes per frame) received
2019.10.1514:36:15.547 Statistics local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
la nueva versión.
2019.10.1514:33:51.458 Core 3 pass 6 returned result 1001000.000000in0:01:01.8402019.10.1514:33:51.485 Core 2 pass 4 returned result 1001000.000000in0:01:01.8672019.10.1514:33:51.521 Core 1 pass 2 returned result 1001000.000000in0:01:01.9032019.10.1514:33:51.524 Core 4 pass 0 returned result 1001000.000000in0:01:01.9062019.10.1514:34:18.802 Core 3 pass 7 returned result 1001000.000000in0:00:27.3462019.10.1514:34:18.837 Core 2 pass 5 returned result 1001000.000000in0:00:27.3542019.10.1514:34:18.892 Core 4 pass 1 returned result 1001000.000000in0:00:27.3702019.10.1514:34:18.922 Core 1 pass 3 returned result 1001000.000000in0:00:27.4032019.10.1514:34:18.922 Tester optimization finished, total passes 82019.10.1514:34:18.932 Statistics optimization done in1 minutes 29 seconds
2019.10.1514:34:18.932 Statistics shortest pass 0:00:27.346, longest pass 0:01:01.906, average pass 0:00:44.6232019.10.1514:34:18.932 Statistics 8000 frames (3.14 Mb total, 412 bytes per frame) received
2019.10.1514:34:18.932 Statistics local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
Y aquí vemos que la primera pasada de agentes (4 agentes) es muy lenta - lo he probado muchas veces - el resultado es estable, pero en el registro
2019.10.1514:38:07.002 Tester OnTesterInit works too long...
¿Qué tiene que ver con esto ahora, quizás@Renat Fatkhullin o@Slava puedan decirme por qué se produce ese efecto?
Sí, lo he visto, pero no lo he probado en la práctica.
Para mí es más bien un problema la preparación de los datos, es decir, la traducción del código en una tabla: tendré que volver a procesar los datos brutos...
Por desgracia, resultó que el compilador no puede hacer frente a un código grande - obtuvo el error "EX5 error de escritura" - ningún otro error. Sería bueno escribir sobre las limitaciones en el manual de usuario.
Hice una versión pública del EA, ahora estoy comprobando si compila o no - el proceso no es rápido, pero ahora se puede ver que el 46% del código se compila y ya se come 36 GB de RAM...
Aleksey Vyazmikin: Hice una versión pública del EA, ahora estoy comprobando si compila o no - el proceso no es rápido, pero ahora se puede ver que el 46% del código se compila y ya se come 36 GB de RAM...
Por favor, facilítame el código para investigar. Comprobaré por qué compila tan lentamente y consume tanta memoria.
Optimizar la lógica. Por ejemplo, trabajar con matrices y bucles. Intenta empaquetar los valores de los criterios en un array. Y hacer comprobaciones en bucle. Tal vez no sea necesario en 74 mil casos entonces...
Por supuesto, en teoría, se puede generar cada cadena mediante un hash largo, y pasar sólo estos hashes, y luego usarlo para generar todo - pero no estoy seguro de que esto sea rápido y la tarea no es sencilla...
1. allí verás los lugares más "lentos" del código. Aunque... otra cuestión es que afecte a la compilación...
2. Como quieras: puedes utilizar el caso. Se le aconsejó que lo dividiera en pequeñas funciones. Desmóntalo y pruébalo. Sí, por supuesto, el código se hará más grande. Pero qué hacer.
Y aquí he reescrito el código en funciones - en el apéndice.
Me he dado cuenta enseguida de que el código anterior ocupaba 14428 kb tras la compilación y el nuevo 9447 kb - ya me sorprende la diferencia de 5 Mbytes - ¡de dónde!
Más adelante, por la velocidad de compilación, la primera
nueva versión
La nueva versión es 5,46 veces más rápida de compilar.
Y aquí está la versión anterior en términos de velocidad:
la nueva versión.
Y aquí vemos que la primera pasada de agentes (4 agentes) es muy lenta - lo he probado muchas veces - el resultado es estable, pero en el registro
¿Qué tiene que ver con esto ahora, quizás@Renat Fatkhullin o@Slava puedan decirme por qué se produce ese efecto?
El archivo está comprimido. Lee el zip, descomprime el interior. Será más rápido que transferir un EA de 500 MB (también se transfiere a cada agente).
¿No se vuelve a descomprimir con cada nuevo pase?
¿Y la lectura del archivo sería más rápida que una transferencia única de....
¿No se vuelve a desempaquetar cada vez que se hace un nuevo pase?
Sí, ¿y la lectura de un archivo sería más rápida que una sola pasada....
Sí, puede ser más lento con la optimización... Pero yo lo comprobaría, todo está preparado para ello.
Sí, puede ser más lento durante la optimización... Pero yo lo comprobaría, todo está preparado para ello.
No entiendo qué es exactamente lo que está preparado.
No entiendo qué es exactamente lo que está preparado.
Trabajar con archivos zip.
Trabajar con archivos zip.
Sí, lo he visto, pero no lo he probado en la práctica.
Para mí es más bien un problema la preparación de los datos, es decir, la traducción del código en una tabla: tendré que volver a procesar los datos brutos...
Hice una versión pública del EA, ahora estoy comprobando si compila o no - el proceso no es rápido, pero ahora se puede ver que el 46% del código se compila y ya se come 36 GB de RAM...
Por favor, facilítame el código para investigar.
Comprobaré por qué compila tan lentamente y consume tanta memoria.