-

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は徐々に増えていないかどうか、
ですかね。
頑張ってください。

最終更新日:2012-08-03 (3,106 views)

関連するトピックス

ページ上部に戻る