1

je dois optimiser un prog en vitesse, et il se trouve que ce qui prend beaucoup de temps, ce sont les concaténations de strings.
j'ai plusieurs idées, je suis en train d'essayer.
mais y a-il des techniques bien connues ??
(c pas croyable ce que ça peut me bouffer comme temps !!!)

ce qui serait pas mal, c un truc du genre :
on reserve un buffer assez gros
on ecrit les bouts de chaine dedans au fur et à mesure.

(en C par exemple j'aurrai fais un gros buffer de char *)


y'a un moyen de faire un truc du meme style en VB ?
(gestion plus ou moins bas niveau des chaines de caracteres ???)

2

g trouvé ça pour ceux que ça interesserait : http://www.vbfrance.com/article.aspx?Val=6788

3

attention, ça compile... #suspens# !!!

(de toutes façons si c pas bien, g deja trouvé un truc tout pourri mais qui semble etre efficace : ..... .. ..... .. . . . . . . . j'écris le tout dans un fichier ! #goret# trigic ça parait débile, mais je suis passé de 17 secondes à .... 2/3 secondes avec cette idée gringringringrin)


c vraiment étrange le VB triso triroll

4

rhaaa, type incompatible !!!
je debugue black

5

bon, g trouvé l'erreur, je recompile !

6

on dirait pas, mais il est vachement actif le forum VB !!

7

appel de procedure incorrect triroll
je crois que je sais d'où ça vient, je recompile...

8

ah ben nan, je ne savais pas !

9

grr tjs pas !
je me demande d'où ça vient hum

10

(qu'est-c qu'elle peut me gaver l'autre à gueuler comme ça à travers les bureaux... je pourrais raconter sa vie .. rage)

11

LOL tritop
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

12

17 secondes pour faire quoi en gros ?

13

jcop :
chaque ligne est une concatenations de differents champs optenus via une requette sql ( rs(...) )
la deuxieme ligne est concatennee à la premiere, la 3eme au deux premieres, etc..
il y avait environ 700 lignes. (sur un P3 548 MHz sous XP)

je suis partit de 46 secondes, puis 17, puis 4/5, puis entre 1, 2 et 3, en moyenne 2
et c pas fini ! magic



attention le code proposé sur VBFrance est buggué !


'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
'Extrait de l'article consacré à l'optimisation du code en VB
'paru dans le mensuel "Programmez!" en novembre 2000 (mensuel n°26)
'et écrit par Xavier LECLERCQ.
'------------------------------------------------------------------------------
'
'Soit deux chaînes de caractères:
'   CH1 = "Méthode standard"
'   CH2 = " de concaténation."
'
'Par concaténation standard, cela donne :
'   CH1 = CH1 & CH2
'   soit CH1 = "Méhode de concaténation standard."
'
'Que fait VB pour réaliser cette opération ?
'   1.  Il alloue une plage mémoire temporaire qui contiendra le résultat;
'   2.  Il copie CH1 au début de cette plage;
'   3.  Il copie CH2 à la fin de cette plage;
'   4.  Il libère la plage mémoire CH1 d'origine;
'   5.  Il alloue la plage mémoire définitive qui contiendra le résultat;
'   6.  Il copie la zone temporaire vers cette plage mémoire définitive.
'
'Il y a beaucoup plus simple en VB !
'
'Soit nos deux chaines de caractères:
'   CH1 = "Méthode standard"
'   CH2 = " de concaténation."
'
'   1.  L1 = Len(CH1)
'   2.  L2 = Len(CH2)
'   3.  CH1 = CH1 & Space(L2)     'Pour une allocation mémoire très rapide
'   4.  Mid(CH1, L1, L2) = CH2    'Copie
'     Remarque personnelle :  c'est l'instruction MID qui est utilisée
'                 et non la fonction... Voir MSDN
'
'Ce qui donne:
'
'   Dim CH1, CH2 As String
'
'   CH1 = "Méthode standard"
'   CH2 = " de concaténation."
'
'   L1 = Len(CH1)
'   L2 = Len(CH2)
'   CH1 = CH1 & Space(L2)
'   Mid(CH1, L1, L2) = CH2
'
'   MsgBox CH1
'



il faut ecrire :


'   Dim CH1, CH2 As String
'
'   CH1 = "Méthode standard"
'   CH2 = " de concaténation."
'
'   L1 = Len(CH1) [4][b]+ 1[/b][/4]
'   L2 = Len(CH2)
'   CH1 = CH1 & Space(L2)
'   Mid(CH1, L1, L2) = CH2
'
'   MsgBox CH1

14

Tu peux aussi utiliser lstrcat ou lstrcpy de kernel32.dll.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

15

Faut quand même pas oublier que les chaînes de VB sont au format BSTR (et par conséquent elles utilisent unicode)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

16

Mais elles sont converties en windows-1252 pour les appels de l'API Win32 (mais il est vrai que cette conversion est lente sad).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

17

Oui mais si tu est malin, tu peux utiliser StrPtr (si ça existe pas c'est un autre nom que j'ai oublié) et passer à la fonction les deux pointeurs vers les chaînes...
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

18

Sauf que ça va boguer avec les '\0' de l'Unicode UTF-16 des BSTR. sad
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

19

Il n'y a pas de version unicode ? (De toute façon on peut aussi utiliser RtlCopyMemory smile)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

20

'Que fait VB pour réaliser cette opération ?
'   1.  Il alloue une plage mémoire temporaire qui contiendra le résultat;
'   2.  Il copie CH1 au début de cette plage;
'   3.  Il copie CH2 à la fin de cette plage;
'   4.  Il libère la plage mémoire CH1 d'origine;
'   5.  Il alloue la plage mémoire définitive qui contiendra le résultat;
'   6.  Il copie la zone temporaire vers cette plage mémoire définitive.

Même GT-Basic est plus efficace tongue (pas d'étapes 5 et 6)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

21

lol grin

j'aurrai du faire l'intranet en GT-Basic alors smile

un intranet de clinique qui tourne sur une TI, la classe cheeky