Optimisez la logique. Par exemple, travailler avec des tableaux et des boucles. Essayez de regrouper les valeurs des critères dans un tableau. Et faire des vérifications en boucle. Peut-être qu'il n'y aura pas besoin de 74 000 cas alors...
Bien sûr, en théorie, on peut générer chaque chaîne par un long hash, et ne passer que ces hashs, puis l'utiliser pour tout générer - mais je ne suis pas sûr que cela soit rapide et la tâche n'est pas simple...
1. Vous y verrez les endroits les plus "lents" du code. Bien que... c'est une autre question de savoir si cela affecte la compilation...
2. Comme vous voulez : vous pouvez utiliser le cas. On vous a conseillé de le décomposer en petites fonctions. Brisez-le et testez-le. Oui, bien sûr, le code va s'élargir. Mais que faire.
Et ici j'ai réécrit le code en fonctions - dans l'annexe.
J'ai tout de suite remarqué que le code précédent prenait 14428 kb après compilation et que le nouveau prenait 9447 kb - je suis déjà surpris par une différence de 5 Mbytes - d'où !
Plus loin par la vitesse de compilation, le premier
0 error(s), 0 warning(s), 2109302 msec elapsed
nouvelle version
0 error(s), 0 warning(s), 386131 msec elapsed
La nouvelle version est 5,46 fois plus rapide à compiler.
Et voici la version précédente en termes de vitesse :
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 nouvelle version.
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%)
Et ici nous voyons que le premier passage d'agents (4 agents) est très lent - je l'ai essayé plusieurs fois - le résultat est stable, mais dans le log
2019.10.1514:38:07.002 Tester OnTesterInit works too long...
Qu'est-ce que cela a à voir maintenant, peut-être que@Renat Fatkhullin ou@Slava peuvent me dire pourquoi un tel effet se produit ?
Le fichier est zippé. Lire le zip, dézipper à l'intérieur. Ce sera plus rapide que le transfert d'un EA de 500 Mo (il est également transféré à chaque agent).
N'est-il pas ensuite décompressé à nouveau à chaque nouveau passage ?
Et la lecture du fichier serait-elle plus rapide qu'un transfert unique de .....
Oui, je l'ai vu, mais je ne l'ai pas essayé en pratique.
Le problème se situe plutôt au niveau de la préparation des données, c'est-à-dire de la traduction du code en tableau - je dois à nouveau traiter les données brutes...
Malheureusement, il s'est avéré que le compilateur ne peut pas faire face à un code volumineux - j'ai obtenu l'erreur "EX5 write error" - aucune autre erreur. Il serait bon d'écrire les limitations dans le manuel d'utilisation !
J'ai créé une version publique de l'EA, maintenant je vérifie - est-ce qu'elle va compiler ou non - le processus n'est pas rapide, mais maintenant vous pouvez voir que 46% du code est compilé et que déjà 36 GB de RAM sont consommés...
Aleksey Vyazmikin: J'ai créé une version publique de l'EA, maintenant je vérifie - est-ce qu'elle va compiler ou non - le processus n'est pas rapide, mais maintenant vous pouvez voir que 46% du code est compilé et que déjà 36 GB de RAM sont consommés...
Veuillez me fournir le code à étudier. Je vais vérifier pourquoi il compile si lentement et consomme tant de mémoire.
Optimisez la logique. Par exemple, travailler avec des tableaux et des boucles. Essayez de regrouper les valeurs des critères dans un tableau. Et faire des vérifications en boucle. Peut-être qu'il n'y aura pas besoin de 74 000 cas alors...
Bien sûr, en théorie, on peut générer chaque chaîne par un long hash, et ne passer que ces hashs, puis l'utiliser pour tout générer - mais je ne suis pas sûr que cela soit rapide et la tâche n'est pas simple...
1. Vous y verrez les endroits les plus "lents" du code. Bien que... c'est une autre question de savoir si cela affecte la compilation...
2. Comme vous voulez : vous pouvez utiliser le cas. On vous a conseillé de le décomposer en petites fonctions. Brisez-le et testez-le. Oui, bien sûr, le code va s'élargir. Mais que faire.
Et ici j'ai réécrit le code en fonctions - dans l'annexe.
J'ai tout de suite remarqué que le code précédent prenait 14428 kb après compilation et que le nouveau prenait 9447 kb - je suis déjà surpris par une différence de 5 Mbytes - d'où !
Plus loin par la vitesse de compilation, le premier
nouvelle version
La nouvelle version est 5,46 fois plus rapide à compiler.
Et voici la version précédente en termes de vitesse :
la nouvelle version.
Et ici nous voyons que le premier passage d'agents (4 agents) est très lent - je l'ai essayé plusieurs fois - le résultat est stable, mais dans le log
Qu'est-ce que cela a à voir maintenant, peut-être que@Renat Fatkhullin ou@Slava peuvent me dire pourquoi un tel effet se produit ?
Le fichier est zippé. Lire le zip, dézipper à l'intérieur. Ce sera plus rapide que le transfert d'un EA de 500 Mo (il est également transféré à chaque agent).
N'est-il pas ensuite décompressé à nouveau à chaque nouveau passage ?
Et la lecture du fichier serait-elle plus rapide qu'un transfert unique de .....
N'est-il pas ensuite déballé à chaque fois qu'un nouveau passage est effectué ?
Oui, et la lecture d'un fichier serait-elle plus rapide qu'une simple passe.....
Oui, il pourrait être plus lent avec l'optimisation... Mais je vérifierais, tout est prévu pour ça.
Oui, cela peut être plus lent pendant l'optimisation... Mais je vérifierais, tout est prêt pour ça.
Qu'est-ce qui est prêt exactement - je ne comprends pas.
Qu'est-ce qui est prêt exactement - je ne comprends pas.
Travailler avec des archives zip.
Travailler avec des archives zip.
Oui, je l'ai vu, mais je ne l'ai pas essayé en pratique.
Le problème se situe plutôt au niveau de la préparation des données, c'est-à-dire de la traduction du code en tableau - je dois à nouveau traiter les données brutes...
J'ai créé une version publique de l'EA, maintenant je vérifie - est-ce qu'elle va compiler ou non - le processus n'est pas rapide, mais maintenant vous pouvez voir que 46% du code est compilé et que déjà 36 GB de RAM sont consommés...
Veuillez me fournir le code à étudier.
Je vais vérifier pourquoi il compile si lentement et consomme tant de mémoire.