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 Linotte

Besoin d'un conseil sur la programmation en Linotte ?

Le Deal du moment : -40%
Grosse promo sur les Baskets Nike Air Max 2090
Voir le deal
89.98 €

2 participants

accroître la vitesse des casiers

avatar
pat
Senior Member


Messages : 497
Date d'inscription : 2008-09-21

accroître la vitesse des casiers Empty accroître la vitesse des casiers

Message par pat Mon 27 May - 21:11

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.
admincpc
admincpc
Site Admin


Messages : 1050
Date d'inscription : 2011-11-03

accroître la vitesse des casiers Empty RE: accroître la vitesse des casiers

Message par admincpc Tue 28 May - 9:29

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 ?
admincpc
admincpc
Site Admin


Messages : 1050
Date d'inscription : 2011-11-03

accroître la vitesse des casiers Empty RE: accroître la vitesse des casiers

Message par admincpc Tue 28 May - 10:48

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]
avatar
pat
Senior Member


Messages : 497
Date d'inscription : 2008-09-21

accroître la vitesse des casiers Empty RE: accroître la vitesse des casiers

Message par pat Tue 28 May - 12:39

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
admincpc
admincpc
Site Admin


Messages : 1050
Date d'inscription : 2011-11-03

accroître la vitesse des casiers Empty RE: accroître la vitesse des casiers

Message par admincpc Tue 28 May - 13:40

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]
admincpc
admincpc
Site Admin


Messages : 1050
Date d'inscription : 2011-11-03

accroître la vitesse des casiers Empty RE: accroître la vitesse des casiers

Message par admincpc Tue 28 May - 13:43

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 ?
avatar
pat
Senior Member


Messages : 497
Date d'inscription : 2008-09-21

accroître la vitesse des casiers Empty RE: accroître la vitesse des casiers

Message par pat Tue 28 May - 20:31

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


Messages : 1050
Date d'inscription : 2011-11-03

accroître la vitesse des casiers Empty RE: accroître la vitesse des casiers

Message par admincpc Tue 28 May - 20:57

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.
avatar
pat
Senior Member


Messages : 497
Date d'inscription : 2008-09-21

accroître la vitesse des casiers Empty RE: accroître la vitesse des casiers

Message par pat Tue 28 May - 22:42

Tout est clair maintenant, merci.


Cependant, cela reste très très lent...
admincpc
admincpc
Site Admin


Messages : 1050
Date d'inscription : 2011-11-03

accroître la vitesse des casiers Empty RE: accroître la vitesse des casiers

Message par admincpc Wed 29 May - 11:36

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...
avatar
pat
Senior Member


Messages : 497
Date d'inscription : 2008-09-21

accroître la vitesse des casiers Empty RE: accroître la vitesse des casiers

Message par pat Wed 29 May - 11:54

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

Contenu sponsorisé


accroître la vitesse des casiers Empty Re: accroître la vitesse des casiers

Message par Contenu sponsorisé


    La date/heure actuelle est Tue 30 Nov - 8:01