我有一門我寫的類,看起來比它應該大。它沒有擴展任何東西,並且幾乎沒有發生 - 或者我想 - 但是每個都佔用了
100k
100字節(感謝back2dos)。我想我沒有很好的理解什麼會影響AS3中對象佔用多少內存。AS3:優化對象內存大小
如果任何人都可以指出我對這個主題的一些閱讀可能有幫助,或者可以解釋一些關於如何思考這個問題的見解,那就太棒了。
我想保留很多這些對象在內存中 - 我想我可以直到現在,但在這個大小,我將不得不創建它們或使用某種對象池技術。
感謝您的協助。
編輯:雖然我爲了得到這個,我保持我這裏張貼的完整性的代碼。該課程已經從原始版本進行了大量修改。引用其他文件的值已被設置爲靜態,以允許代碼爲其他人運行(理論上hehehe ...)。
雖然我的情況已經解決,但我會給出有關類和內存信息的良好參考的答案。
在這種情況下,該類有15個變量。我只使用單個字符串和一系列整數,Numbers和布爾值,並在全局可用的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;
}
}
}
我改名的東西的職位,這不是我的確切碼。我改變了這一點。我還將一些依賴於其他文件的變量更改爲固定值,這些變量說明了您看到的很多奇怪現象。 當我運行Flex Profiler時,當我運行它時,我獲得了約12000個。我想我假設正在使用的內存是Kb無b,因爲內存監視器正在跟蹤kb。嗯......所以我猜想事情是有序的,而且我誤解了在這種情況下我所看到的。感謝您的理解。我已更新帖子以注意代碼已被修改。 – grey 2009-08-01 18:49:06