bseb67 Posté(e) le 25 juin 2008 Posté(e) le 25 juin 2008 Salut! Le titre est un peu bizarre, car je suis tombé sur un super mystère.J'ai une fonction qui s'appelle total, lorsque je la lance une premièrefois sur mon dessin elle met environ 24s.Si je la lance une deuxième fois elle met 25s,une troisième fois elle passe à 26-27s.une quatrième fois elle passe à 30s. Je vois que tout de suite certains vont se dire, c'est normal, car le dessin change, et bien non,ma fonction supprime des blocs sur mon dessin et ré-insère les blocs, c'est juste pour une miseà jour. Et comme mes blocs ne changent pas le temps devrai être pratiquement le même. J'ai fait un petit test en utilisant le lisp de benchmark (désolé, mais je ne connais plus lien)et j'ai copier ma fonction pour avoir total1 total2 et total3 Premier test:(benchmark '((total1)(total2)(total3))) Elapsed milliseconds / relative speed for 1 iteration(s):rking ... (TOTAL1).....23203 / 1.62 (TOTAL2).....30157 / 1.25 (TOTAL3).....37546 / 1.00 zoom sur le dessin, et je relance (benchmark '((total1)(total2)(total3))) Elapsed milliseconds / relative speed for 1 iteration(s): (TOTAL1).....24828 / 1.54 (TOTAL2).....31719 / 1.21 (TOTAL3).....38234 / 1.00 je relance simplement (benchmark '((total1)(total2)(total3))) Elapsed milliseconds / relative speed for 1 iteration(s): (TOTAL1).....28328 / 1.46 (TOTAL2).....35516 / 1.17 (TOTAL3).....41484 / 1.00 Dans les trois benchmark, total1 < total2 < total3, mais alors pourquoi le total1 du deuxième bench est-il plus rapide quand même que le total3 du premier bench? Trouvant ca super bizarre, j'ai donc mis dans un lisp ceci:(benchmark '((total1)(total2)(total3))) (benchmark '((total1)(total2)(total3))) (benchmark '((total1)(total2)(total3))) Je charge le lisp qui lance donc les trois benchmark à la suite, et là surprise :o :Elapsed milliseconds / relative speed for 1 iteration(s): (TOTAL1).....35657 / 1.40 (TOTAL2).....41906 / 1.19 (TOTAL3).....49782 / 1.00 Elapsed milliseconds / relative speed for 1 iteration(s): (TOTAL1).....56296 / 1.13 (TOTAL2).....61922 / 1.03 (TOTAL3).....63563 / 1.00 Elapsed milliseconds / relative speed for 1 iteration(s): (TOTAL1).....65375 / 1.01 (TOTAL2).....65468 / 1.01 (TOTAL3).....66109 / 1.00 Dans tous les cas total1 < total2 < total3 mais total1 du 2ème> total3 du 1er bench. Si quelqu'un sait pourquoi je suis preneur. a+ [Edité le 25/6/2008 par bseb67] Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Bred Posté(e) le 25 juin 2008 Posté(e) le 25 juin 2008 Salut,par expérience, le temps de déroulement du programme, entre autre bien sûr du temps passé à l'exécuter, est susceptible de changer selon les process actif sur ton système, et selon les moments où des fonctions automatiques se mettent en marche (messagerie, anti-virus, Liv-update, etc...)Mais c'est quand même difficile de te répondre sans avoir le prog sous les yeux.... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
bseb67 Posté(e) le 25 juin 2008 Auteur Posté(e) le 25 juin 2008 Salut bred, Ces paramètres externes je sais qu'ils peuvent faire varier le temps,mais j'ai fais les essais en coupant le maximum de processus et en déconnectant mon pcdu réseau, donc rien que du local, et bien sur je ne touche pas à la souris ni au clavier. Je n'ai pas gardé les valeurs, mais j'ai même testé sur des répétitions de 10 à 15 au lieude 3 comme je le décri avant, et c'est toujours les mêmes conclusions. Donc, on clair, + tu lisp, - ca lisp ;) haha! Bon, disons que normalement, en utilisation classique, le dessinateur ne fera pas des lancementssuccessifs, mais comme mon rôle est d'automatiser des manipulations, mes patrons souhaitentque se soit rapide. C'est pour cela que je fais toujours des mesures de temps, afin de voir si c'estutile ou non et je mesure souvent les sous-fonctions pour trouver laquelle me fait perdre le plus de temps et donc chercher à l'améliorer. Normalement "je ne devrai pas donner ca", mais voici le code (bien-sur ce n'est que quelques lignessur les 15.000 que font tous les lisp réunis) (defun total1() (setq fonc_name "total1: ") (cond ; on lance la suppression des Tés sur le groupe ((= (delete_tes_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR d'effacement des Tés sur le réseau") -1) ) ; on lance la suppression des réductions sur le groupe ((= (delete_rcc_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR d'effacement des Tés sur le réseau") -1) ) ; on lance la suppression des coudes sur le groupe ((= (delete_coudes_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR d'effacement des coudes sur le réseau") -1) ) ; on lance la suppression des tuyaux sur le groupe ((= (delete_tuyaux_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR d'effacement des tuyaux sur le réseau") -1) ) ((= (setq VAR_AT_LISTE_POINTS_RESEAU (get_pointsCAD_du_groupe VAR_AT_GROUPE_ENCOURS)) nil) ) ((= (place_tes_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR de placement des Tés") nil) ) ((= (place_rcc_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR de placement des rcc") nil) ) ((= (place_coudes_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR de placement des coudes") nil) ) ((= (ramene_reduction_du_reseau) nil) ) ((= (place_tuyaux_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR de placement des tuyaux") nil) ) (t (zoom_groupe VAR_AT_GROUPE_ENCOURS) (setq res t) ) ) ) voila. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant