Dans une tentative de voir et, espérons-le, comprendre le garbage collector d'ActionScript, j'ai mis en place un exemple de projet qui loop-tweens la valeur d'un paramètre pixel bender sur scène. Ma première préoccupation était la quantité de mémoire utilisée au lancement (~ 26 Mo). Bien que j'aime croire que je me méfie de la mémoire en supprimant les écouteurs d'événements et en annulant autant que possible les objets inutiles pour la collecte des ordures, je crois aussi que je ne comprends pas vraiment où, pourquoi et quand cela fonctionne. La trace de la mémoire totale du système affichait une augmentation régulière à partir d'environ 26 Mo jusqu'à environ 28 Mo après environ une minute plus tard (environ). soudainement, il est tombé à 25 Mo seulement pour continuer à augmenter encore une fois. Cela semble fonctionner encore et encore.Comprendre ActionScript Garbage Collection
Voici quelques questions qui vous viennent à l'esprit: 1. Y a-t-il un délai général pour le garbage collector? 2. est-il activé après l'allocation d'une certaine quantité de mémoire? 3. les objets peuvent-ils être supprimés explicitement immédiatement sans dépendre du garbage collector? 4. Quelle est la plage acceptable pour l'utilisation de la mémoire lors de l'exécution du flash?
attaché est mon code.
import fl.transitions.*;
import fl.transitions.easing.*;
var shader:Shader;
var shaderFilter:ShaderFilter;
var motionTween:Tween;
var filterParameter:Number = 0.0;
var loader:URLLoader = new URLLoader();
var phase:Boolean = false;
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, dataLoaded);
loader.load(new URLRequest("myBoringFilter.pbj"));
function dataLoaded(e:Event):void
{
loader.removeEventListener(Event.COMPLETE, dataLoaded);
shader = new Shader(e.target.data);
shaderFilter = new ShaderFilter(shader);
flower.filters = [shaderFilter];
tweenLoop(null);
}
function tweenLoop(e:TweenEvent):void
{
if (motionTween != null)
{
motionTween.removeEventListener(TweenEvent.MOTION_CHANGE, updateFilter);
motionTween.removeEventListener(TweenEvent.MOTION_FINISH, tweenLoop);
motionTween = null;
}
phase = !phase;
if (phase == true)
{motionTween = new Tween(this, "filterParameter", Regular.easeOut, filterParameter, 100.0, 2.0, true);}
else
{motionTween = new Tween(this, "filterParameter", Regular.easeOut, filterParameter, -100.0, 1.0, true);}
motionTween.addEventListener(TweenEvent.MOTION_CHANGE, updateFilter);
motionTween.addEventListener(TweenEvent.MOTION_FINISH, tweenLoop);
}
function updateFilter(e:TweenEvent):void
{
shader.data.amount.value = [filterParameter];
flower.filters = [shaderFilter];
//Update Memory
trace("System Total Memory: " + System.totalMemory);
}
merci pour le lien – TheDarkIn1978
Juste une remarque: cet article est très ancienne et ne pas (entièrement) à appliquer AS3 . –