Page 3 sur 7
Publié : mar. 07/avr./2009 13:29
par Backup
Fortix a écrit :Salut, je n'ais pas parcourru de A à Z ce topic mais j'ais compris Grosso Modo de quoi ça parle
et effectivement
il faut créer une
Norme de présentation
effectivement , tu aurai mieux fait de lire le topic !!
tu aurai constaté, qu'il ne s'agit pas du tout d'imposer une norme, mais tout simplement de donner des conseils, qui peuvent aider a se retrouver dans un code, même vieux de plusieurs années !!
tu peux continuer a programmer comme bon te semble , il n'est nullement question, de vouloir obliger a quoique ce soit ..(encore heureux !!

)
la prochaine fois, lit le topic en entier , cela évitera ce genre de réflexion

---->
il est donc prudent de lancer un sondage au préalable, et si il y a "une allimité" (c'est bien écrit

) mettre au point une forme de présentation dite "universelle"
Publié : mer. 08/avr./2009 15:33
par Fortix

pas la peine de s'énerver
et puis en plus ce semblant de sujet reste dans le bon sens (à condition de ne pas obliger qui que se soit bien sûr

)
organiser son code (Tabul, espace entre le procedure, zone de commentaire au conditionnel, noms des variables non abstraites, etc...)pour mieux être compris

Publié : mer. 08/avr./2009 16:07
par Backup
Fortix a écrit :
pas la peine de s'énerver
oui c'est sur !

Publié : sam. 25/avr./2009 21:28
par Ollivier
Au lieu d'écrire
Il est plus rapide à l'exécution d'écrire
... Et de placer en Condition1 la plus condition qui sera estimée le plus souvent fausse.
Publié : sam. 25/avr./2009 23:31
par cha0s
Ollivier a écrit :Au lieu d'écrire
Il est plus rapide à l'exécution d'écrire
ceci me prouve le contraire
Code : Tout sélectionner
a = #False
temp = ElapsedMilliseconds()
For n = 1 To 10000000
If a And a
EndIf
Next n
Debug ElapsedMilliseconds() - temp
temp = ElapsedMilliseconds()
For n = 1 To 10000000
If a
If a
EndIf
EndIf
Next n
Debug ElapsedMilliseconds() - temp
Publié : dim. 26/avr./2009 1:41
par Ollivier
@ChaOs Si, si : j'insiste: 30% de gain ici !
Code : Tout sélectionner
DisableDebugger ; ********************************************************** 1
a = #False
Delay(1) ; ******************************************************************* 2
temp = ElapsedMilliseconds()
For n = 1 To 100000000
If a And a
EndIf
Next n
Norm = ElapsedMilliseconds() - temp
MessageRequester("Norm1", Str(Norm) )
Delay(1) ; ******************************************************************** 3
temp = ElapsedMilliseconds()
For n = 1 To 100000000
If a
If a
EndIf
EndIf
Next n
Opti = ElapsedMilliseconds() - temp
MessageRequester("Opti1", Str(Opti) )
a = #True
Delay(1)
temp = ElapsedMilliseconds()
For n = 1 To 100000000
If a And a
EndIf
Next n
Norm + (ElapsedMilliseconds() - temp)
MessageRequester("Norm1", Str(Norm) )
Delay(1)
temp = ElapsedMilliseconds()
For n = 1 To 100000000
If a
If a
EndIf
EndIf
Next n
Opti + (ElapsedMilliseconds() - temp)
MessageRequester("Conclusion pour False ET pour True", "Normal = " + Str(Norm) + Chr(10) + "Opti = " + Str(Opti) )
Publié : dim. 26/avr./2009 8:13
par Ollivier
Dans le prolongement booléen de cette banane, voici un autre code
Code : Tout sélectionner
Macro MyMacro()
...
EndMacro
If Condition1 Or Condition2
MyMacro()
EndIf
Il est plus rapide à l'exécution d'inverser les deux conditions manuellement et d'écrire ceci à la place:
Code : Tout sélectionner
Macro MyMacro()
...
EndMacro
If (Not Condition1) ; Ici, on inverse ('=' devient '<>', etc...)
If (Not Condition2) ; Ici, idem
; Ligne vide
Else
MyMacro()
EndIf
Else
MyMacro()
EndIf
Woilà. Il fallait que je la fasse en deux étapes celle-là!
Pourquoi faire simple quand on peut faire compliqué?
>> Parce qu'il faut se méfier des apparences : c'est plus véloce !
Ollivier
Publié : dim. 26/avr./2009 13:12
par cha0s
@Olivier : exacte le debugeur fausse les résultats mais pour avoir des tests vraiment pointue faudrait voir le nombre de cycle utilisé.
Publié : dim. 26/avr./2009 13:47
par PAPIPP
Bonjour a tous
Je viens de réaliser plusieurs tests sur l'optimisation
statistiquement le if imbriqué est plus rapide que le AND
Par contre le (if not cd1) est toujours plus lent que le If normal
Exemple :
Code : Tout sélectionner
DisableDebugger ; ********************************************************** 1
mes.s=""
maxit=100000000
For i=0 To 5
If i%2
a=a=#True
aa.s="oui"
bb.s="non"
Else
a = #False
aa.s="non"
bb.s="oui"
EndIf
mes=mes+Str(a)+" ****"+Chr(10)
temp = ElapsedMilliseconds()
For n = 1 To maxit
If a And a
EndIf
Next n
tp1=ElapsedMilliseconds()-temp
temp = ElapsedMilliseconds()
For n = 1 To maxit
If a
If a
EndIf
EndIf
Next n
tp2=ElapsedMilliseconds()-temp
temp = ElapsedMilliseconds()
For n = 1 To maxit
If aa="non" And bb="oui"
EndIf
Next n
tp3=ElapsedMilliseconds()-temp
temp = ElapsedMilliseconds()
For n = 1 To maxit
If aa="non"
If bb="oui"
EndIf
EndIf
Next n
tp4=ElapsedMilliseconds()-temp
temp = ElapsedMilliseconds()
For n = 1 To maxit
If Not (aa<>"non")
If Not (bb<>"oui")
EndIf
EndIf
Next n
tp5=ElapsedMilliseconds()-temp
mes=mes+"AND1_"+Str(I)+"= "+Str(tp1)+Chr(10)
mes=mes+"IF1_"+Str(I)+"= "+Str(tp2)+Chr(10)
mes=mes+"AND2_"+Str(I)+"= "+Str(tp3)+Chr(10)
mes=mes+"IF2_"+Str(I)+"= "+Str(tp4)+Chr(10)
mes=mes+"IF2 inv_"+Str(I)+"= "+Str(tp5)+Chr(10)
mes=mes+"****"+Chr(10)
Next i
MessageRequester("AND ou IF ", mes )
A+
Publié : dim. 26/avr./2009 14:23
par cha0s
dans le cas ou il y a beaucoup de test, privilégier le select peut être un plus
Code : Tout sélectionner
DisableDebugger
a = 7
temp = ElapsedMilliseconds()
For n = 1 To 100000000
Select a
Case 1
Case 2
Case 3
Case 4
Case 5
Case 6
Case 7
EndSelect
Next n
temp = ElapsedMilliseconds() - temp
MessageRequester("", Str(temp))
temp = ElapsedMilliseconds()
For n = 1 To 100000000
If a = 1
ElseIf a = 2
ElseIf a = 3
ElseIf a = 4
ElseIf a = 5
ElseIf a = 6
ElseIf a = 7
EndIf
Next n
temp = ElapsedMilliseconds() - temp
MessageRequester("", Str(temp))
Publié : ven. 01/mai/2009 19:59
par KrisJNT
puisque l'on est dans méthode et beauté du code,
je voudrais savoir :
est-il possible décrire une ligne de code sur plusieurs ligne ? L'idéal serait (pour moi) des lignes comme ceci :
Code : Tout sélectionner
OpenWindow(#window, _
10, 10, _
640, 480, _
"Titre de ma fenêtre", _
#WS_VISIBLE)
Cette écriture qui permet de poursuivre une ligne de code sur une autre est celle de Liberty Basic, le langage de programmation que j'utilisais avant PB. Justement, je trouve PB très bien, mais comm syntaxe, les commandes sont un peu longue et ça donne un impression de surcharge, je trouve...
Bref, s'il y a un moyen, comment peut-on faire ?
Publié : ven. 01/mai/2009 20:17
par Backup
non pas possible actuellement , peut etre la prochaine version

Publié : mar. 12/mai/2009 18:03
par jerexgrz
select case ... est plus rapide que if ... elseif ... ?
bizarre j'ai le contraire (debuggeur desactivé):
859 le 1er
813 le 2nd (if ...)
Publié : ven. 15/mai/2009 15:35
par Geo Trouvpatou
Salut.
Bon je voulais tester quelques trucs au niveau rapidité d'execution.
Donc je viens ici pour récupérer un code pour un benchmark, mais je me demande si cela sert à quelque chose.
Vous dites que tel ou tel truc est plus rapide que tel autre truc.
Moi je veux bien mais dans le code ci-dessous quel est le plus rapide pour les un et les autres
Code : Tout sélectionner
DisableDebugger ; ********************************************************** 1
Delay(1) ; ******************************************************************* 2
temp = ElapsedMilliseconds()
For n = 1 To 100000000
trucATester + 1
Next n
Norm = ElapsedMilliseconds() - temp
MessageRequester("Norm1", Str(Norm) + " - " + Str(trucATester))
Delay(1) ; ******************************************************************** 3
temp = ElapsedMilliseconds()
For n = 1 To 100000000
trucATester + 1
Next n
Opti = ElapsedMilliseconds() - temp
MessageRequester("Opti1", Str(Opti) + " - " + Str(trucATester))
Bref pas très fiable ce bench
Sauf si les différences d'exécution se comptent en secondes (ou en heures

)
Bye.
Publié : sam. 16/mai/2009 17:51
par cha0s
peut etre que avec ceci les test seront plus précis
Code : Tout sélectionner
Procedure.q ElapsedCycles()
!rdtsc
ProcedureReturn
EndProcedure