Forums Développement Multimédia

Aller au contenu

[résolu] :  déallouer la ram des données lingo

Director

2 réponses à ce sujet

#1 papwal

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 201 messages

Posté 18 August 2010 - 06:02 AM

Bonjour,

J'ai lu ça sur l'aide en ligne: http://help.adobe.co...5525e-8000.html

"There are two different ways of managing memory: the JavaScript runtime engine is garbage collected, whereas the Lingo runtime engine is not"


Donc pour le javascript engine c'est un garbage collector qui nettoie la ram... et pour lingo y'en a pas.

Donc comment ça marche en lingo ?


Mettons que je crée un énorme tableau qui contient plein de datas compliquées:

bigTable = [ [5646654654654,654654654,6546,65465465987987,654,....] , [#ref:objetcompliqué,#bla:bip...] , [liste de trucs... ]]

et qu'il n'y a pas d'autres références dans le programme qui pourraient référencer les données


si je fais

bigTable = void



a/ est-ce que les données qui sont dedans vont être automatiquement déallouées ?

b/ ou est-ce que mon gros tableau va rester bloqué dans la ram jusqu'à la fermeture du programme ?


si jamais c'est la réponse b/ la bonne, comment je fais pour nettoyer la ram ?
faut-il faire une espece de boucle récursive qui détruit une par une les props des sous-tableaux ?

#2 sebastien.portebois

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 3876 messages

Posté 18 August 2010 - 09:08 AM

Salut !

[quote name='papwal' date='18 August 2010 - 07:02 AM' timestamp='1282107726' post='53604']
Donc pour le javascript engine c'est un garbage collector qui nettoie la ram... et pour lingo y'en a pas.

Donc comment ça marche en lingo ?
[/quote]

En fait oui, mais non ;)

En javascript le ramasse miettes peut être appelé explicitement, alors qu'en Lingo il fait son boulot tout seul sans qu'on puisse explicitement l'appeler.
Le garbage collector Lingo est très classique et fonctionne sur le principe du compteur de référence (sans qu'on puisse explicitement définir des références faibles entre des instances, toutes les références créées sont fortes).


[quote]
Mettons que je crée un énorme tableau qui contient plein de datas compliquées:

bigTable = [ [5646654654654,654654654,6546,65465465987987,654,....] , [#ref:objetcompliqué,#bla:bip...] , [liste de trucs... ]]

et qu'il n'y a pas d'autres références dans le programme qui pourraient référencer les données


si je fais

bigTable = void



a/ est-ce que les données qui sont dedans vont être automatiquement déallouées ?
[quote]

oui, dès que le garbage collector sera appelé par la machine virtuelle Lingo, c'est à dire des qu'il aura du temps ou qu'il manquera de ressources et devra alors faire de la place. (formulé autrement, ca veut dire que tu es sur que ce sera nettoyé, mais tu ne peux pas savoir quand)


J'avais écrit un brouillon y'a quelques années sur le nettoyage de références circulaires, et comment tester rapidement la mémoire (car bon l'inspecteur de mémoire de Director est d'un intérêt disons limité !)

http://sebastien.portebois.free.fr/lingo/circularReference/lisezmoi.htm

C'est encore bourré de fautes, mais l'utilisation de gros buffer image pour surcharger la ram et plus facilement observer ce qui se passe,e t sur le nettoyage, ca reste d'actualité 7 ans plus tard ;)

Bonne journée,
Séb

#3 papwal

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 201 messages

Posté 19 August 2010 - 11:14 AM

merci seb ;)



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