|
...Optimisation mémoire... Eviter de ramerNombreux sont ceux qui parlent de ce terrible fléau que l'on appelle "L'appli qui rame". Et oui ! Qui n'a pas déjà été déçu en voyant son travail saccader lors de la lecture de la projection ?... Tout particulièrement lorsque celle-ci passe par CD. En effet, vous savez que votre appli utilise la RAM de l'ordinateur pour fonctionner. C'est à dire qu'à chaque fois que vous provoquez un événement sur votre appli (Appel d'un member, d'un son, d'une vidéo, d'une transition, voire le clic sur un bouton...), les ressources en RAM sont puisées. Cela signifie que si l'ordinateur manque de RAM, Et bien... Ca rame... Pourquoi ?Pour une simple et bonne raison : Lorsque la mémoire vive (RAM) est saturée, la mémoire de votre Disque Dur (qui est beaucoup plus lente) prend le relais pour subvenir aux besoins de l'appli. D'où les saccades. N'oublions pas, qui plus est, que la RAM de votre ordinateur est déjà mis à contribution par d'autres programmes mais aussi par votre système d'exploitation. Imaginez donc, une machine avec windows XP et seulement 128 de RAM avec plusieurs programmes différents !!! Bien sûr, la puissance du processeur, la vitesse du lecteur CD (quand l'appli est lue directement sur le CD) sont des facteurs très importants également qui vont faire la différence. Mais nous nous pencherons uniquement sur ce problème de mémoire. -------------------------------------------------------------------------------- L'inspecteur de mémoire :
Pour cela, il existe un inspecteur sur Director qui vous permet de visualiser les variations de vos ressources. En cliquant sur "Fenêtre/inspecteurs/mémoire", il apparaitra alors. Vous pouvez alors voir une jauge qui prend en compte les ressources puisées par votre "movie", mais également celles utilisées par l'ensemble des autres programmes... Utiles, vous en conviendrez. Attardons nous un peu sur cet inspecteur de mémoire. Mémoire
physique (pour les utilisateurs de Windows) présente
la quantité de mémoire RAM installée sur le système. Taille
partition (pour Mac) affiche la quantité de mémoire
affectée à Director dans la case "Lire les informations"
de votre OS (que vous pouvez modifier à volonté... L'un
des points forts du Mac). Cette option n'est disponible que si l'option
de mémoire temporaire est activée. Total utilisé : indique la quantité de mémoire RAM utilisée pour une animation, celle ci va varier selon les différentes manipulations de votre animation lors de la lecture. c'est aussi sur celle-ci que nous allons jouer pour réduire les "coûts" en mémoire.
Programme
: indique la quantité de mémoire utilisée
par Director, hormis l'espace occupé par le fichier d'application
Director lui-même. Celle-ci est incompressible. Qui plus est, elle
ne sera pas présente sur toutes les machines bien entendu (Le/la
client(e) n'ayant pas forcément Director). Distr.
et scénario : indique la quantité de mémoire
utilisée par les acteurs dans la fenêtre Distribution ainsi
que la notation dans la fenêtre "Scénario". Les
acteurs comprennent tous les graphiques de la fenêtre Dessin, tous
le texte de la fenêtre Texte, les acteurs qui utilisent l'encre
Dessin seul dans le scénario, les miniatures de la fenêtre
Distribution ainsi que tous les sons, palettes, boutons, animations vidéo
numérique ou fichiers liés importés dans la distribution
et actuellement chargés en mémoire. Tampon d'écran : indique la quantité de mémoire que Director réserve pour un espace de travail pendant la lecture de certains éléments sur la scène. Comme dit précédemment, nous allons donc jouer sur la partie "Total utilisé" pour optimiser votre mémoire.
Maintenant, activez votre animation et garder l'oeil sur votre inspecteur de mémoire. En effectuant diverses manipulations, vous allez vite vous rendre compte que le "Total utilisé" varie à la hausse. Parfois... Ca fait peur. A un moment, je n'osais même plus appuyer sur les boutons. Il s'agit à présent de limiter sa constante augmentation, la stabiliser à une valeur acceptable. Pour cela, plusieurs choses à faire.
Les phénomènes de purgesComme nous le savons, chaque acteur, quelqu'il soit, puise de la RAM. Il faut donc les enlever de la mémoire. Pour cela, cliquez sur l'inspecteur de propriété de votre acteur (le "i" entouré de bleu) puis sur l'onglet "acteur". Vous voyez apparaître une zone "Priorité de purges" avec quatre niveaux différents. Comment ça marche ??? Chaque niveau est une méthode de gestion de la mémoire de votre objet. Je m'explique. Selon votre choix, votre acteur sera immédiatement purgé de la mémoire RAM lorsque celle ci sera saturée ou bien elle sera gardé pendant un certain laps de temps. Par défaut, la priorité de purge est toujours sur 3. C'est à dire que l'objet est balayé de la mémoire quasimment tout de suite lorsque Director se sentira pris à la gorge par le manque de ressource. Les quatres niveaux sont :
Il
faut donc utiliser ces priorités à bon escient. Pour un
objet que vous utilisez très fréquemment, il est intéressant
de lui mettre un ordre de priorité moindre afin que celui ci ne
soit pas effacé dès que la machine commence à souffler.
Je vous donne un exemple : Un bouton qui mène vers des crédits
est généralement utilisé une seule fois lors de l'utilisation.
Par contre, votre bouton Menu doit rester en mémoire tout le temps
pour que l'ordinateur n'ai pas à le recharger à tout bout
de champ... Il vaut mieux que ce soit votre crédit qui s'efface
temporairement que votre menu.
commande : purgepriority L'instruction suivante affecte la valeur 3 à la priorité de purge de l'acteur Arrière-plan, ce qui signifie qu'il sera l'un des premiers acteurs à être purgés lorsque Director aura besoin de mémoire :
Et pour les amoureux du code "verbose"
-------------------------------------------------------------------------------- Purger soi même
Supposons que vous ayez réalisé un lecteur Audio avec plusieurs morceaux de votre choix. Lorsque vous séléctionnez un nouveau morceau, le précédent, n'est pas pour autant purger de la mémoire. Cela prend donc beaucoup plus de mémoire. Pour remédier à ce problème, certaines commandes existent :
Par
exemple
L'instruction suivante supprime de la mémoire les acteurs utilisés dans les images 1 à 50 (inclus) :
Vous pouvez également utiliser les marqueurs comme repère.
UNLOADMEMBER Cette commande a la même fonction, si ce n'est que l'on ne spécifie pas par image mais par acteur. Elle ne se limite donc pas à votre scénario. La purge affecte la distribution également. Par exemple :
Code: de même qu'avec "unLoad", vous pouvez choisir une fourchette d'acteurs en utilisant deux arguments Par exemple : L'instruction suivante purge de la mémoire tous les acteurs compris entre l'acteur 1 et l'acteur écran :
Code: Enfin, si vous n'utilisez pas d'argument, tous vos acteurs seront purgés de votre animation. >> revenons donc à notre lecteur audio : Soit deux morceaux de musique : member "Radiohead" et member "MassiveAttack" Sans la commande unloadmember, les deux morceaux sont gardés en mémoire. Par contre, dans le cas suivant :
Au clic de souris, Le member "Radiohead" sera purgé alors que le member "MassiveAttack" est rendu actif. Ces deux commandes vous permettrons déjà de stabiliser votre inspecteur de mémoire. Faites un test avec l'exemple précédent en enlevant le unloadmember. Observez votre inspecteur. Puis recommencez avec la commande. vous allez voir, votre mémoire va vous remercier . :-) Cependant, ces commandes doivent être utilisées selon le contexte. En effet, qui dit purge, dit également nécéssité de le recharger lors d'un nouvel appel. cela peut prendre quelques instants selon la nature de l'acteur. En effet, soit vous gardez vos éléments en mémoire (pas besoin de charger) mais votre appli risque de ralentir car la mémoire sera saturée, soit vous purgez vos éléments pour stabiliser vos ressources, mais le rappel sera légèrement plus long. -------------------------------------------------------------------------------- Les préchargements
PRELOAD : précharge en mémoire des acteurs de l'image ou de la plage d'images spécifiée et s'arrête lorsque la mémoire disponible est saturée ou que tous les acteurs spécifiés ont été préchargés. Il fonctionne de manière un peu analogue au Unload (Sauf qu'il charge en mémoire au lieu de purger ) si ce n'est qu'il précharge à PARTIR de l'image choisie et ce jusqu'à la fin de l'animation. Par exemple : Les acteurs qui se situent entre l'image 10 et la fin de l'anim sont préchargés.
Les acteurs qui se situent entre le marker "pouet" et la fin de l'anim sont préchargés.
Les acteurs qui se situent entr l'image 10 et l'image 50 sont préchargés.
Les acteurs qui se situent entre l'image 10 et le marker "pouet" sont préchargés.
En l'absence d'argument, la commande précharge tous les acteurs utilisés depuis l'image courante jusqu'à la dernière image d'une animation.
Exemple : L'instruction suivante précharge l'acteur 20 de la première distribution (interne) :
--> Shadowrun étant l'acteur et "cyber" le nom de la distribution Si les deux arguments "deLacteur" et "aLacteur" sont fournis, la commande preLoadMember précharge tous les acteurs dans la plage spécifiée par les noms ou numéros des acteurs. Exemple : L'instruction suivante précharge dans la fenêtre Distribution l'acteur Temple et les 10 acteurs qui le suivent :
Par exemple : L'instruction suivante précharge les objets de l'animation équipe qui est située dans le même dossier que l'animation courante :
on mouseup me
Eviter les trop grosses projections
Préférez donc une projection de lancement avec les .dir qui gravitent autour. Ainsi, au lieu d'avoir une projection lourde, vous aurez plusieurs petites animations qui seront "tuées" lors de leur fermeture grâce au code suivant :
Cela dit vous pouvez utiliser cette commande avec un "on mouseup" par exemple :
La fluidité de votre application. Comme dit précédemment, la mémoire ne sera pas saturée car les données de chaque fenêtre seront tuées au fur et à mesure
Mais comment faire un stub de lancement ?1- Tout d'abord, Créer un dossier sur votre bureau. Vous pouvez l'appeler comme vous le désirez. Dans notre cas, nous le nommerons "Mon projet" 2-
A présent, ouvrez ce dossier et créer un autre dossier à
l'intérieur que vous nommerez "Movies" 3- A la racine du dossier "Mon projet", créez un nouveau dossier appelé "Xtras". (Il offre la possibilité d'un démarrage plus rapide car vous aurez séléctionné les Xtras dont vous avez besoin. Cette partie, facultative cela dit, sera présentée plus tard) 4- Ouvrez votre ".dir" qui servira de stub et créez votre projection en ajoutant aucun autre movie. Cette projection que vous créez DOIT se trouver à la racine du dossier "Mon projet" afin qu'elle soit visible en priorité. Vos relations entre votre stub de lancement et vos movie se fera alors automatiquement.
|
||
Contact : Steve Louis |