Forums Développement Multimédia

Aller au contenu

Listes très volumineuses

Director

4 réponses à ce sujet

#1 akita

    Ceinture Jaune

  • Members
  • PipPip
  • 24 messages

Posté 14 January 2010 - 04:11 AM

Bonjour à tous,

Je travaille actuellement sur un projet nécessitant des listes très volumineuses.

Est-ce que quelqu'un sait s'il y a un nombre maximum d'éléments qu'une liste peut contenir dans Director? Pour certaines listes très volumineuses, la fonction count() me retourne un nombre négatif...

Merci d'avance!

Akita

#2 sebastien.portebois

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 3876 messages

Posté 14 January 2010 - 09:44 AM

Bonjour

Je vais répondre un peu à côté de la question, mais il est probable qu'il faille revoir la conception de tes structures de données pour éviter de telles listes.
En effet en Lingo les listes sont en théorie limitées par
- the maxInteger : l'index max des des éléments référencables, = 2147483647
- la mémoire disponible pour stocker la liste

Mais surtout le soucis le plus rapidement rencontré avec les listes Lingo est leur temps de traitement, le travail sur les listes de plusieurs dizaines de milliers d'éléments étant très long (comparé à d'autres languages).

Il est probable que tu doivent passer par une base de données pour stocker/manipuler tes données et ne pas utiliser de listes Lingo si le volume est vraiment conséquent.

Exemple de limites atteintes :

l = []
l[30000000] = "a"
-- ca fonctionne
l[30000000 +1] = "a"
-- une erreur "toute la mémoire disponible a été consommée blahblah"

Mais cette consommation de mémoire est relative aux manipulations sur la liste, et pas uniquement à sa taille :

l = []
l[40000000] = "a"
-- ca fonctionne alors qu'on est beaucoup plus loin que 30000001
l[40000000 +1] = "a"
-- une erreur "toute la mémoire disponible a été consommée blahblah"


Pour revenir à la question initiale, lorsqu'on fait des opérations qui dépassent le maxInteger, celui-ci "boucle" et recommence donc à négatifs le plus grand référencable :

a = the maxInteger
put a
-- 2147483647
put a+1
-- -2147483648


Cela peut également se produite avec the milliseconds pour une machine qui ne serait 'jamais' rebootée.

Bonne journée,
Séb

#3 akita

    Ceinture Jaune

  • Members
  • PipPip
  • 24 messages

Posté 14 January 2010 - 19:13 PM

Bonjour Séb,

Merci pour ces informations. Même si je travaille avec Director depuis plusieurs années, je ne connaissais pas la fonction "the maxInteger". Je vais faire quelques recherches pour trouver des solutions alternatives.

Aurais-tu un bon système de bases de données que tu pourrais me suggéré, qui s'utilise bien avec Lingo et, surtout, qui est compatible Mac/PC?

Merci
Akita

#4 akita

    Ceinture Jaune

  • Members
  • PipPip
  • 24 messages

Posté 14 January 2010 - 19:59 PM

Bonjour encore une fois!

Je viens de constater que le nombre d'éléments dans ma liste est bien inférieur au maxInteger. Même en comptant le nombre de caractéeres contenus dans la liste, nous sommes loin du compte.

Au départ de l'animation, les listes sont stockées dans des members textes. Elles sont chargés en mémoire avec la fonction value(). Le problème pourrait-il venir de là?

J'ai fait des tests en créant des listes comme tu l'as fait dans ton exemple, avec un repeat. J'ai pu créer sans problème des listes bien plus volumineuses que mes listes problématiques.

Merci d'avance,
Akita

#5 glurp

    Modérateur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 1260 messages

Posté 14 January 2010 - 23:23 PM

Voir le messageakita, le 14 January 2010 - 19:59 PM, dit :

Au départ de l'animation, les listes sont stockées dans des members textes. Elles sont chargés en mémoire avec la fonction value(). Le problème pourrait-il venir de là?

Salut akita,

A mon avis, oui, ton problème vient de là.
Un autre "truc" possible que j'ai déjà utilisé est de définir ta liste dans un scripttext.

Dans ton script de Movie principal :

global gList

on prepareMovie

   -- member("initList") est un script de Movie vide --
   member("initList").scriptText = member("textList").text
   
   gList = initList()

   put gList

end
 

Dans l'acteur champ texte member("textList") :

on initList

   tList = [[i]tous les lments de ta liste[/i]]
   return tList

end
 




1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP