il y'a egallement un autre code de technicorn ici :
http://www.purebasic.fr/english/viewtop ... 32&start=0
mais je ne l'ai pas testé car il faut apparement changer le compilateur fasm de purebasic pour le remplacer par une autre version, j'ai trouvé celui de Trond beaucoup plus pratique et conci...
A mon avis, l'auteur de purebasic devrait revoir la commande mid car une telle difference de vitesse est aberrante surtout que cette commande est souvent utilisé, en plus a quoi bon permettre la gestion de chaine illimité en taille si le temps de traitement ne suit pas...
Code : Tout sélectionner
; Codé par Trond
Macro Mid2(String, StartPos, Length)
MidAscii(@String, StartPos, Length)
EndMacro
Procedure.s MidAscii(String, StartPos, Length)
!MOV eax, [p.v_String]
!ADD eax, [p.v_StartPos]
!DEC eax
!MOV edx, eax
!ADD eax, [p.v_Length]
!MOV cl, byte [eax]
!PUSH ecx
!MOV byte [eax], 0
!MOV ebx, eax
!PUSH dword [_PB_StringBasePosition]
!CALL _SYS_CopyString@0
!POP eax
!ADD eax, [PB_StringBase]
!POP ecx
!MOV byte [ebx], cl
ProcedureReturn
ProcedureReturn ""
EndProcedure
TailleChaine=300
VeryLongString.s = Space(TailleChaine)+"AAAABBBBCCCCDDDD"
TailleChaine+5
;Debug Mid2(VeryLongString, TailleChaine, 4):End
CR.s=Chr(13)
#Tries = 10000000
time = GetTickCount_()
For I = 0 To #Tries
Mid(VeryLongString, TailleChaine, 4)
Next
Resmid=GetTickCount_()-time
time = GetTickCount_()
For I = 0 To #Tries
Mid2(VeryLongString, TailleChaine, 4)
Next
Resmid2=GetTickCount_()-time
MessageRequester(""," Purebasic Mid : "+ Str(Resmid) + CR + " Mid2 = " + Str(Resmid2) + CR + " Environ "+ Str(Resmid/Resmid2) + " fois plus rapide",#PB_MessageRequester_Ok )