ActionScript3.0 自動的にメモリが増えていく。
//描画
for (var i:uint = 0; i < _numPoint - 1; i++){
//各中間点
var mx:Number = (_points[i].x + _points[i + 1].x) / 2;
var my:Number = (_points[i].y + _points[i + 1].y) / 2;
graphics.curveTo(_points[i].x, _points[i].y, mx, my);
}
これは、水のようにふわふわ揺れる丸を描画するActionScriptの一部です。(このスクリプトはエンターフレームで実行されています)
このソースコードの、mxやmyを求める式の部分で使用メモリ量がなぜか、微量ずつですが、増加していまいます。
var mx:Number = (_points[i].x + _points[i + 1].x) / 2; の式を、
var mx:Number = 62.214 / 2などに変えた場合、メモリは一切増加しなくなります。
_pointsの中身は、{x:●● , y:●●}のようにNumber型が格納されているだけです。
原因が分かる方いらっしゃいましたら、教えて頂きたいです。
みんなの回答 5 件
_pointの中身がどんどん増えていってるのでは?
エンターフレーム内で毎回 mx と my を宣言してるからかも?
宣言を外に出してあげたらどうでしょう?
エンターフレーム内ということはローカル変数だからそれは無いんじゃないの?GCされるでしょ。
この一部分のソースだけだと別に問題無いから他の部分じゃない?
(上の人もあげてるけど_pointsの中身が増えていってるとかしか考えられない)
一時間ぐらいメモリ量見てたらちゃんと解放されてるかもよ。
メモリ増加が微量だったらそんなすぐにGC発動してメモリ解放にならないはず。
GCできれいにしてもらうために変数宣言をループの手前でして、まわし終わったら一応変数にnullいれておくとか。
どこかのタイミングで定期的に
graphics.clear();してるかどうか、_points = [];してるかどうか、
またはnumPoint のuintは徐々に増えていないかどうか、
ですかね。
頑張ってください。
関連するトピックス