Mon système Bibi-Binaire est largement beaucoup trop long.
J'ai essayé d'optimiser le plus possible, bien que 10 fois plus rapide...
Ainsi les résultat sont mieux mais encore plus de 10x trop long de trop par apport à Hex().
Utiliser la mémoire est un bon moyen d'optimiser ces routines mais c'est un travail assez complexe...
J'aurais besoin svp de votre aide pour me dire comment je dois m'y prendre.
Ceci me conviens pas, trop lent, ya qu'a rien qu'à voir ce code là pour s'en rendre compte:
Code : Tout sélectionner
*MemoireID = AllocateMemory(32)
If *MemoireID
A = ElapsedMilliseconds()
For I = 1 To 10000000
PokeS(*MemoireID, Hex(I))
Next
B = ElapsedMilliseconds() - A
Debug B
Else
Debug "Impossible d'allouer la mémoire demandée !"
EndIf
Ici, voyez, boucle 10 (1 000 000 au lieux de 10 000 000) fois moins
longue et prends plus de temps quand même !:
Code : Tout sélectionner
; Code crée par Monsieur Dieppedalle David le 09/03/2016.
; Système Hexadécimale Bibi-binaire.
Global *MemoireIDChaineHexadecimalBibiBinaire = AllocateMemory(32)
If *MemoireIDChaineHexadecimalBibiBinaire
PokeS(*MemoireIDChaineHexadecimalBibiBinaire, "HOHAHEHIBOBABEBIKOKAKEKIDODADEDI", 32, #PB_Ascii)
Else
Debug "Impossible d'allouer la mémoire demandée !"
End
EndIf
Global *MemoireIDChaineSortie = AllocateMemory(32)
If *MemoireIDChaineSortie
Else
Debug "Impossible d'allouer la mémoire demandée !"
End
EndIf
Global *MemoireIDChaineSortieTemps = AllocateMemory(32)
If *MemoireIDChaineSortieTemps
Else
Debug "Impossible d'allouer la mémoire demandée !"
End
EndIf
Procedure.s DecimalToBibiBinaire(Nombre.q)
Repeat
Division.q = Nombre.q / 16
Reste.q = Nombre.q - (Division.q * 16)
PokeS(*MemoireIDChaineSortie + PositionEcriture.i, PeekS(*MemoireIDChaineHexadecimalBibiBinaire + (Reste.q * 2), 2, #PB_Ascii))
PositionEcriture.i + 2
Nombre.q = Division.q
Until Division.q < 16
If Division.q > 0
PokeS(*MemoireIDChaineSortie + PositionEcriture.i, PeekS(*MemoireIDChaineHexadecimalBibiBinaire + (Division.q * 2), 2, #PB_Ascii))
EndIf
; Met la chaîne à l'envert
If PositionEcriture.i > 2
For I = PositionEcriture.i To 0 Step -2
PokeS(*MemoireIDChaineSortieTemps + PositionEcriture2.i, PeekS(*MemoireIDChaineSortie + I, 2, #PB_Ascii), 2, #PB_Ascii)
PositionEcriture2.i + 2
Next
ProcedureReturn PeekS(*MemoireIDChaineSortieTemps)
Else
ProcedureReturn PeekS(*MemoireIDChaineSortie)
EndIf
EndProcedure
A = ElapsedMilliseconds()
For I = 1 To 1000000
DecimalToBibiBinaire(I)
Next
B = ElapsedMilliseconds() - A
Debug B