【发布时间】:2009-08-01 13:56:06
【问题描述】:
我有一个我写的类,它看起来比它应该的要大。它没有扩展任何东西,并且几乎没有发生什么 - 或者我认为 - 但每个都占用不到 100k100 字节(感谢 back2dos )。我想我对真正影响 AS3 中对象占用多少内存的因素没有很好的理解。
如果有人能指出一些关于该主题的阅读材料可能会有所帮助,或者解释一些关于如何思考这个问题的见解,那就太棒了。
我想在内存中保留很多这些对象 - 直到现在我都认为可以,但在这个大小下,我将不得不创建它们或使用某种对象池技术。
感谢您的帮助。
编辑: 虽然我已经整理好了,但为了完整起见,我保留了我在此处发布的代码。该类已从原始版本进行了大量修改。引用其他文件的值已设为静态,以允许代码为其他人运行(理论上嘿嘿嘿...)。
虽然我的情况已经整理好了,但我还是给个不错的参考答案吧,关于类和内存的信息。
在这种情况下,该类有 15 个变量。我只使用了一个字符串和一堆整数、数字和布尔值,并在全球可用的 XML 数据中引用了更多相同的内容。它还为构造函数导入 Point,尽管没有存储点。在测试中,即使没有全局 XML 引用或 Point 类,它仍然在每个大约 84k 左右。除了构造函数之外,还有 7 个变量和几个方法的 getter。所有这些都少于 20 行(而且我的编码风格非常稀疏)。
提到的类仅供参考,但请随意概括:
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;
}
}
}
【问题讨论】:
标签: actionscript-3 optimization memory-management class object