J'ai une classe que j'ai écrite, et elle semble plus grande qu'elle ne devrait l'être. Cela ne fait rien, et il y a très peu de choses - ou du moins je le pensais - mais chacune d'elles prend un peu moins de
100k
100 octets (merci back2dos). Je suppose que je n'ai pas une très bonne compréhension de ce qui affecte vraiment la quantité de mémoire qu'un objet prend dans AS3.AS3: Optimisation de la taille de la mémoire de l'objet
Si quelqu'un peut me montrer quelques lectures sur le sujet qui pourrait être utile, ou peut-être expliquer un aperçu de la façon de penser à ce sujet, ce serait génial. Je voudrais garder beaucoup de ces objets en mémoire - et je pensais pouvoir le faire jusqu'à présent, mais à cette taille, je vais devoir les créer ou utiliser une technique de pool d'objets quelconque.
Merci pour l'aide.
Edit:Bien que j'ai ce dans l'ordre, je garde le code que j'ai posté ici pour être complet. La classe a été fortement modifiée par rapport à la version originale. Les valeurs qui faisaient référence à d'autres fichiers ont été rendues statiques pour permettre au code de fonctionner pour quelqu'un d'autre (en théorie hehehe ...). Bien que ma situation soit réglée, je donnerai la réponse à une bonne référence pour l'information sur les classes et la mémoire.
Dans ce cas, la classe a 15 variables. J'utilise seulement une seule chaîne et un tas d'ints, de nombres, et de booléens avec quelques références à plus de la même chose dans les données XML globalement disponibles. Il importe également Point pour le constructeur, bien qu'aucun point ne soit stocké. Dans les tests, même sans les références XML globales ou la classe Point, il reste environ ~ 84k chacun. Il y a des getters pour 7 des variables et quelques méthodes en plus du constructeur. Tout ce qui est inférieur à 20 lignes (et j'ai un style de codage très clairsemé).
La classe mentionné pour référence, mais ne hésitez pas à généraliser:
package
{
public class AObject
{
private var _counter:int;
private var _frames:int;
private var _speed:int;
private var _currentState:String;
private var _currentFrame:int;
private var _offset:int;
private var _endFrame:int;
private var _type:int;
private var _object:int;
private var _state:int;
private var _x:Number;
private var _y:Number;
private var _w:int;
private var _h:int;
private var _update:Boolean;
public function AObject(targetX : int, targetY : int, state : int, object : int, type : int)
{
_x = targetX;
_y = targetY;
_type = type;
_object = object;
_state = state;
_counter = 0;
_w = 32;
_h = 32
_update = true;
setState(state);
}
public function setState(state:int) : void
{
_currentState = "bob";
var frameCounter : int = 0;
var stateCounter : int = state - 1;
while (state > 0)
{
frameCounter += 4;
--stateCounter;
}
_offset = frameCounter;
_currentFrame = _offset;
_speed = 10;
_frames = 4;
_endFrame = _offset + _frames - 1;
}
public function get state() : int
{
return _state;
}
public function animate() : Boolean
{
if (count())
{
if(_currentFrame < _endFrame)
{
++_currentFrame;
}
else
{
_currentFrame = _offset;
}
_speed = 10;
return true;
}
else
{
return false;
}
}
private var adder: Number = 0;
private function count():Boolean
{
_counter++;
if (_counter == _speed)
{
_counter = 0;
return true;
}
else
{
return false;
}
}
public function get x():int
{
return _x;
}
public function get y():int
{
return _y;
}
public function get type():int
{
return _type;
}
public function get object():int
{
return _object;
}
public function get currentFrame():int
{
return _currentFrame;
}
public function get w():int
{
return _w;
}
public function get h():int
{
return _h;
}
}
}
Je renomme des choses pour le poste, ce n'est pas mon exacte code. J'ai changé ça. J'ai également changé un certain nombre de variables qui s'appuient sur d'autres fichiers pour être des valeurs fixes ici, ce qui explique beaucoup de l'étrangeté que vous voyez. Lorsque je lance le profileur Flex, je reçois environ 12 000 maintenant lorsque je l'exécute. Je suppose que je supposais que la mémoire utilisée était Kb no b, puisque le moniteur de mémoire suit kb. Hmmm ... donc je suppose que les choses sont en ordre et que j'ai mal interprété ce que je voyais dans ce cas. Merci de m'avoir arrangé. J'ai mis à jour le post pour noter que le code a été modifié. – grey