Forum Liberty Basic France
• Index
Bonjour bonjour,
Ici je voudrais mettre à jour l'écriture horizontale que je trouve plutot inexistante dans les codes que je trouve sur le net. Pourtant, les gains brutes en performance sont entre 10-20% pour les même calculs .... d'ou ma question : Pourquoi écrit-on en vertical ?
Voici un exemple d'écriture verticale (non optimisé donc) puis d'écriture horizontale (allant jusqu'à 20% plus vite) ce sont des exemple... ne faite pas copier coller en espérant que ca marche XD
code vertical :
print #test, "place 100 50"; "ceci est un test numéro "; test
print #test, "place 40 100"; "tout est ok dans ce test"
test = test + 1
dataTEST = 5425
print #test, "place 200 200"; "fin du test"
code horizontal :
print #test, "place 100 50"; "ceci est un test numéro "; test : print #test, "place 40 100"; "tout est ok dans ce test" : test = test + 1 : dataTEST = 5425 : print #test, "place 200 200"; "fin du test"
Ici je voudrais mettre à jour l'écriture horizontale que je trouve plutot inexistante dans les codes que je trouve sur le net. Pourtant, les gains brutes en performance sont entre 10-20% pour les même calculs .... d'ou ma question : Pourquoi écrit-on en vertical ?
Voici un exemple d'écriture verticale (non optimisé donc) puis d'écriture horizontale (allant jusqu'à 20% plus vite) ce sont des exemple... ne faite pas copier coller en espérant que ca marche XD
code vertical :
print #test, "place 100 50"; "ceci est un test numéro "; test
print #test, "place 40 100"; "tout est ok dans ce test"
test = test + 1
dataTEST = 5425
print #test, "place 200 200"; "fin du test"
code horizontal :
print #test, "place 100 50"; "ceci est un test numéro "; test : print #test, "place 40 100"; "tout est ok dans ce test" : test = test + 1 : dataTEST = 5425 : print #test, "place 200 200"; "fin du test"
slt,
une première chose importante à prendre en compte c'est que :
- on n'a pas toujours besoin de vitesse.
Dans ces cas là, je pense qu'il est bien d'aéré et de rendre son code lisible pour la maintenance ultérieur.
... pour l'autre cas où, c'est effetcivement important, je préfère laissé les VRAIS informaticiens/programmeurs répondre
Edité par joan74 Le 27/05/2020 à 19h15
une première chose importante à prendre en compte c'est que :
- on n'a pas toujours besoin de vitesse.
Dans ces cas là, je pense qu'il est bien d'aéré et de rendre son code lisible pour la maintenance ultérieur.
... pour l'autre cas où, c'est effetcivement important, je préfère laissé les VRAIS informaticiens/programmeurs répondre

Edité par joan74 Le 27/05/2020 à 19h15
____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
Pour tester, il faut mettre un: "ta =time$("milliseconds")" en début de test
Un: "tb=time$("milliseconds")" à la fin
Et faire t=tb-ta
faire les deux tests (avec des instructions identiques) et afficher les temps dans des textbox.
Et là, on te croira.
Code VB :
Un: "tb=time$("milliseconds")" à la fin
Et faire t=tb-ta
faire les deux tests (avec des instructions identiques) et afficher les temps dans des textbox.
Et là, on te croira.
Code VB :
NOMAINWIN WindowWidth = 600: WindowHeight = 400 UpperLeftX = 10: UpperLeftY = 20 TEXTBOX #w.tun, 20 , 50, 100, 25 TEXTBOX #w.tdeux, 150 , 50, 100, 25 BUTTON #w.go, "Go !", [goa], UL, 50, 80, 40, 20 BUTTON #w.go, "Go !", [gob], UL, 180, 80, 40, 20 GRAPHICBOX #w.m 5, 5, 585, 360 OPEN "Help" FOR window_nf AS #w #w, "TRAPCLOSE [closeHelp]" ' #w.m, "when leftButtonDown [scanne]" #w.m "down;fill darkred" #w.m, "when leftButtonMove [scanne]" wait [goa] ta =time$("milliseconds") #w.m, "down" #w.m, "fill darkpink" #w.m, "color white" #w.m, "backcolor darkpink" #w.m, "font courrier 12 bold" #w.m, "place 20 120" #w.m, "\test A" tb=time$("milliseconds") tun=tb-ta #w.tun, str$(tun) wait [gob] tc =time$("milliseconds") #w.m, "down;fill darkpink;color white;backcolor darkpink;font courrier 12 bold" #w.m, "place 180 120": #w.m, "\test B" td=time$("milliseconds") tdeux=td-tc #w.tdeux, str$(tdeux) wait [closeHelp] CLOSE #w END
____________________
Roro
Roro
je lai fait, avec le test des if et des "case" =)
il suffit de remplacer les if en bas par des if developper et tu pourras constater la différence. En horizontal on est a 317-322 ms max, en developper (vertical) on est a 359-367ms
Code VB :
Edité par atomose Le 27/05/2020 à 20h33
il suffit de remplacer les if en bas par des if developper et tu pourras constater la différence. En horizontal on est a 317-322 ms max, en developper (vertical) on est a 359-367ms
Code VB :
dim MoveE(100) 'on choisit les valeurs pour le simili MoveE+n° d'ordre numtest=2 select case numtest case 1 : test$="0 56 22 0 1 69" 'équivalent de MoveE1 à MoveE6 case 2 : test$="1 0 28 1 65 80" case 3 : test$="0 1 45 3 5 0" end select print "chaine retenue : ";test$ 'à l'intérieur de la chaîne, on compte le nombre de séparateurs de données sep=0 for a=1 to len(test$) if mid$(test$,a,1)=" " then sep=sep+1 next 'auquel on ajoute 1 pour avoir le nombre de données nb=sep+1 'et on remplit MoveE() avec ces données for a=0 to nb-1 MoveE(a)=val(word$(test$,a)) next 'chaque élément de Move() est relié à un deux sprites ayant mêmes coordonnées 'un sprite qui s'affiche lorsque l'élément de move vaut 0, un autre qui s'affiche losque lélément est > 0 'il faut autant de sprites que d'éléments de MoveE() possprite$="20 40 20 60 89 24 557 63 212 489 652 321" dim sprxy(nb*2,2) for a=0 to nb-1 sprxy(a,0)=val(word$(possprite$,a*2+1)) sprxy(a,1)=val(word$(possprite$,a*2+2)) print "MoveE(";a;"), équivalent à MoveE";a;" original, coordonnées sprite x=";sprxy(a,0);", y=";sprxy(a,1) next '***** début chronométrage 1****** tours=10000 topdepart1=time$("ms") for boucles=1 to tours 'pour chacune des données de MoveE(), on regarde quel traitement s'applique for a=0 to nb-1 'numéro du sprite : 1 pour move0, 11 pour move1, 109 pour move 10 if a=0 then nbsprite=1 if a>0 and a<10 then nbsprite=a+10 if a>9 then nbsprite=a+100 'juste pour ne pas répéter 36 fois la meme instruction... nsp$=str$(nbsprite) nomE$="E"+nsp$ nomD$="ED"+nsp$ spx=sprxy(a,0) spy=sprxy(a,1) if MoveE(a)>0 then chaine1$="spritexy ";nomE$;" ";spx;" ";spy : chaine2$="SpriteVisible ";nomE$;" on" : chaine3$="cyclesprite ";nomE$;" 1" : chaine4$="spritevisible ";nomD$;" off" : chaine5$="spritetofront ";nomE$;" " if MoveE(a)=0 then chaine1$="spritexy ";nomD$;" ";spx;" ";spy+10 : chaine2$="SpriteVisible ";nomD$;" on" : chaine4$="spritevisible ";nomE$;" off" next next boucles '***** fin chronométrage 1 ***** topfin1=time$("ms") '****** préparation prochain bloc à tester MoveE1=MoveE(0) MoveE2=MoveE(1) MoveE3=MoveE(2) MoveE4=MoveE(3) MoveE5=MoveE(4) MoveE6=MoveE(5) '******* début chronométrage 2 topdepart2=time$("ms") for boucles=1 to tours if MoveE1 > 0 then chaine1$="spritexy E1 ";E1x;" ";E1y : chaine2$="SpriteVisible E1 on" : chaine3$="cyclesprite E1 1" : chaine4$="SpriteVisible ED1 off" : chaine5$="spritetofront E1" if MoveE1 = 0 then chaine1$="spritexy ED1 ";E1x;" ";E1y+10 : chaine2$="SpriteVisible ED1 on" : chaine3$="SpriteVisible E1 off" if MoveE2 > 0 then chaine1$="spritexy E11 ";E11x;" ";E11y : chaine2$="SpriteVisible E11 on" : chaine3$= "cyclesprite E11 1" : chaine4$="SpriteVisible ED11 off" : chaine5$="spritetofront E11" if MoveE2 = 0 then chaine1$="spritexy ED11 ";E11x;" ";E11y+10 : chaine2$="SpriteVisible ED11 on" : chaine3$="SpriteVisible E11 off" if MoveE3 > 0 then chaine1$="spritexy E12 ";E12x;" ";E12y : chaine2$="SpriteVisible E12 on" : chaine3$= "cyclesprite E12 1" : chaine4$="SpriteVisible ED12 off" : chaine5$="spritetofront E12" if MoveE3 = 0 then chaine1$="spritexy ED12 ";E12x;" ";E12y+10 : chaine2$="SpriteVisible ED12 on" : chaine3$="SpriteVisible E12 off" if MoveE4 > 0 then chaine1$="spritexy E13 ";E13x;" ";E13y : chaine2$="SpriteVisible E13 on" : chaine3$= "cyclesprite E13 1" : chaine4$="SpriteVisible ED13 off" : chaine5$="spritetofront E13" if MoveE4 = 0 then chaine1$="spritexy ED13 ";E13x;" ";E13y+10 : chaine2$="SpriteVisible ED13 on" : chaine3$="SpriteVisible E13 off" if MoveE5 > 0 then chaine1$="spritexy E14 ";E14x;" ";E14y : chaine2$="SpriteVisible E14 on" : chaine3$= "cyclesprite E14 1" : chaine4$="SpriteVisible ED14 off" : chaine5$="spritetofront E14" if MoveE5 = 0 then chaine1$="spritexy ED14 ";E14x;" ";E14y+10 : chaine2$="SpriteVisible ED14 on" : chaine3$="SpriteVisible E14 off" if MoveE6 > 0 then chaine1$="spritexy E15 ";E15x;" ";E15y : chaine2$="SpriteVisible E15 on" : chaine3$= "cyclesprite E15 1" : chaine4$="SpriteVisible ED15 off" : chaine5$="spritetofront E15" if MoveE6 = 0 then chaine1$="spritexy ED15 ";E15x;" ";E15y+10 : chaine2$="SpriteVisible ED15 on" : chaine3$="SpriteVisible E15 off" next boucles '***** fin chronométrage 2 ***** '***** résultats des chronométrages ******* topfin2=time$("ms") print print "pour ";tours;" fois les blocs d'instructions, l'ordi a mis : " print " ";topfin1-topdepart1;" ms pour la solution à base de boucles" print " ";topfin2-topdepart2;" ms pour la solution à base d'ifs" end
Edité par atomose Le 27/05/2020 à 20h33
A mon avis tu compare deux procédures et non deux écritures différentes
Ou je ne comprends pas tes concepts de verticale/horizontale.
Ou je ne comprends pas tes concepts de verticale/horizontale.
____________________
Roro
Roro
nn dans un premier test je fait avec l'ecriture horizontal
dans un second test je retire la partie des if qui est horizontal et je la remplace par un developpement vertical. Après je compare les deux résultat. je ne tiens pas compte de la solution a base de boucles ce qui m'interesse c juste le chrono pour les if.
dans un second test je retire la partie des if qui est horizontal et je la remplace par un developpement vertical. Après je compare les deux résultat. je ne tiens pas compte de la solution a base de boucles ce qui m'interesse c juste le chrono pour les if.
Intègre les deux blocs de code que tu compare dans le mien; un bloc entre : ta ...tb et l'autre bloc entre: tc...td
ça sera plus clair.
ça sera plus clair.
____________________
Roro
Roro
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie