Programmer avec le langage Linotte
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Programmer avec le langage LinotteConnexion

Besoin d'un conseil sur la programmation en Linotte ?

Le deal à ne pas rater :
SITRAM Set 3 poêles tous feux dont induction + poigner amovible
20.99 €
Voir le deal

descriptionaccroître la vitesse des casiers Emptyaccroître la vitesse des casiers

more_horiz
Il serait bien, si possible, d'accroître la vitesse en lecture-écriture des acteurs casiers (non persistant). Car dès que la taille des casiers dépasse quelque milliers d'items, toutes modifications de la valeur d'un élément devient très lente.

descriptionaccroître la vitesse des casiers EmptyRE: accroître la vitesse des casiers

more_horiz
C'est noté.
quand tu parles de modification de la valeur, tu parles bien de la modification d'un acteur dans un tableau et non l'ajout ou la suppression d'un élément dans un casier ?

descriptionaccroître la vitesse des casiers EmptyRE: accroître la vitesse des casiers

more_horiz
Combien d'éléments as-tu dans ton tableau ?
J'ai essayé cet exemple, il n'est pas instantané mais reste rapide :
[php]
principale :
a est un casier de nombres
début
pour chaque 100000, ajoute joker dans a
pour chaque 100000, a{joker} vaut 1000-joker
[/php]

descriptionaccroître la vitesse des casiers EmptyRE: accroître la vitesse des casiers

more_horiz
Point question d'ajout ou de suppression, juste une modification de la valeur, voici le code que j'utilise :

(le casier num (non persistant) est crée à partir un casier persistant avec l'instruction num=#snum
num contient 500 000 items nombre).

cls1 :
Rôles :
v & i est un nombre
Actions :
affiche "cls1"
v=#num{2002}
Pour i de 140000 à 259999 ,lis
num{i}=#v
ferme
affiche i

descriptionaccroître la vitesse des casiers EmptyRE: accroître la vitesse des casiers

more_horiz
Je pense voir d'où vient le problème (subtile..)

Dans cette exemple :
[php]
démonstration :
les grands rôles :
num est un casier de nombres vide

principale :
rôles :
v & i est un nombre
actions :
pour chaque 500000, ajoute joker dans num
v vaut #num{2002}
Pour i de 140000 à 259999, lis
num{i} vaut #v
ferme
[/php]

Tu vas cloner tout le tableau "num" lors de chaque boucle.

Pour corriger ça, il faut mettre :
v vaut #(num{2002})

Et obtenir ainsi :
[php]
démonstration :
les grands rôles :
num est un casier de nombres vide

principale :
rôles :
v & i est un nombre
actions :
pour chaque 500000, ajoute joker dans num
v vaut #(num{2002})
Pour i de 140000 à 259999, lis
num{i} vaut #v
ferme
[/php]

descriptionaccroître la vitesse des casiers EmptyRE: accroître la vitesse des casiers

more_horiz
La version 2.1 a ajouté la fonction nommée "clone" qui effectue le même travail que le symbole #.

[php]
démonstration :
les grands rôles :
num est un casier de nombres vide

principale :
rôles :
v & i est un nombre
actions :
pour chaque 500000, ajoute joker dans num
v vaut clone(num{2002})
Pour i de 140000 à 259999, lis
num{i} vaut clone(v)
ferme
[/php]

ça permet de rendre le code plus simple à comprendre ?

descriptionaccroître la vitesse des casiers EmptyRE: accroître la vitesse des casiers

more_horiz
Je ne comprends pas bien la différence entre #(num{2002}) et #num{2002} mais soit !

descriptionaccroître la vitesse des casiers EmptyRE: accroître la vitesse des casiers

more_horiz
pat a écrit:

Je ne comprends pas bien la différence entre #(num{2002}) et #num{2002} mais soit !


#num{2002}

Tu clones le tableau entier et ensuite tu extrais la valeur du tableau clonée. Ainsi, si ton tableau contient 10000 éléments, tu clones ces 100000 éléments pour n'en garder qu'un seul !
#(num{2002})

Tu extrais la valeur du tableau et ensuite tu clones cette valeur.

descriptionaccroître la vitesse des casiers EmptyRE: accroître la vitesse des casiers

more_horiz
Tout est clair maintenant, merci.


Cependant, cela reste très très lent...

descriptionaccroître la vitesse des casiers EmptyRE: accroître la vitesse des casiers

more_horiz
pat a écrit:

Cependant, cela reste très très lent...


Il est vrai que les programmes écrits en Linotte sont de plus en plus gros et tant mieux.
Il faudra que je retravaille sur l'optimisation du moteur d'exécution qui date de 2010 ( http://langagelinotte.free.fr/wordpress/?p=163 ).

Le temps passe vite...

descriptionaccroître la vitesse des casiers EmptyRE: accroître la vitesse des casiers

more_horiz
J'ai constaté depuis que le ralentissement est du au fait que le casier num a été crée avec l'instruction num=#(snum).

descriptionaccroître la vitesse des casiers EmptyRe: accroître la vitesse des casiers

more_horiz
privacy_tip Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum