Vitesse de concaténation et mémoire

Soit ce code :
<code 4D>
$str_t:=""
TABLEAU ENTIER LONG($ms_al;0x0000)
$start_l:=Nombre de millisecondes
Boucle ($i_l;1;300000)
$str_t:=$str_t+“a”
Si ($i_l%1000=0)
AJOUTER À TABLEAU($ms_al;Nombre de millisecondes-$start_l)
Fin de si
Fin de boucle
</code 4D>
Puis on trace la courbe y=f(longueur) :
[]21917645;“Your comment here…”[/]
Que la courbe soit exponentielle n’a rien de nouveau et les contournements sont connus, mais ce point d’inflexion, quelque part entre 256K et 257K, m’a intrigué. Alors j’ai calculé :
256000 caractères * 4 octets par caractère = 1024K.
Marrant, non ?

Salut Arnaud,
pour que ce soit plus précis et que le redimensionnement du tableau ait le moins d’impact possible, il serait préférable de dimensionner le tableau au départ à 300 lignes et de valoriser une ligne existante (=> pas de décalage mémoire lors des redimensionnements de tableau à chaque fois). Mais bon, ça ne va pas impacter lourd non plus :wink: mais ça joue forcément sur l’exponentielle.
A+
Denis

Salut Denis,
j’ai remarqué à plusieurs reprises que pré dimensionner les tableaux comme je le fais quasiment par automatisme depuis la nuit des temps n’a plus guère de sens. Peut-être y a t-il eu une grosse amélioration d’AJOUTER A TABLEAU, je suis incapable de dire quand. De toutes façons, ça ne changera rien à la forme de la courbe et au fait que ce test est purement anecdotique ! :slight_smile:

C’est certain ! Je confirme :wink:

Après un petit test rapide, même sur un très gros tableau (10 000 000) ajouter à tableau ne prend que 30 à 50% de temps en plus à charger par boucle, soit 12 secondes au lieu de 8 en v15 (temps identiques en v16).

Voici le code si certains veulent s’amuser à vérifier :
$Nb:=10000000

$deb:=Nombre de millisecondes
TABLEAU TEXTE($Tab;0)
Boucle ($i;1;$Nb)
AJOUTER À TABLEAU($Tab;“A”)
Fin de boucle
$Durée:=Nombre de millisecondes
$Durée:=$Durée-$Deb

$deb:=Nombre de millisecondes
TABLEAU TEXTE($Tab;$Nb)
Boucle ($i;1;$Nb)
$Tab{$i}:=“A”
Fin de boucle
$Durée2:=Nombre de millisecondes
$Durée2:=$Durée2-$Deb

Bon, aller… au boulot ! :wink:

: Denis JAGER

temps identiques en v16
L’impression se confirme, merci d’avoir testé !
Bon, aller… au boulot ! :wink:
tu as raison, on oublie l’essentiel en ce vendredi : retournons à http://forums.4d.com/Post/FR/21949370/1/21949371#21949371nos fusions>.


Fusionne Man