メイン コーダーズルーム【スクリプト系】 ガベージの制御 | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
kenken5050 | Åê¹ÆNo.45516 投稿日時: 2010-8-20 10:19 |
新米 居住地: 投稿: 6
使用環境:
winXP actionscript3 Flash cs3 |
ガベージの制御 flash cs3 as3でゲームのプログラムを組んでいます。
たまに動作が数フレーム止まってしまいます。 ガベージコレクションのせいだと思うのですが ゲーム中にガベージが行われないようにする為にどのような 事を行えばよいのかお教え願えますでしょうか? ゲーム中でnewをせず、初期化時にワークを全て確保しておけば 起こらないでしょうか? どうぞ、宜しくお願いいたします。 |
ゲスト | Åê¹ÆNo.45518 投稿日時: 2010-8-20 11:04 |
Re: ガベージの制御 こんにちは。
GCは状況に応じてFlash Playerが自動的に行うので、Flashの再生中にGCを行われないようにする手段はありません。 ※ただ、GCが発動するタイミングは傾向があります。 次の資料に詳しく載っていますので、参考ください。 http://level0.kayac.com/2009/12/fitc_tokyo_grantskinner.php GCで変数が回収されないようにするには、次のように工夫してみるといかがでしょう? ・ローカル変数だと回収されるので、されたくないものはメンバー変数に格納する。 ・複数個のオブジェクトのインスタンスを生成する場合はオブジェクトをプールするといった方法(メンバー変数の配列などに保持)をとる。 ・addEventListenerで弱参照は使わない ・Dictionaryで弱参照は使わない |
|
kenken5050 | Åê¹ÆNo.45532 投稿日時: 2010-8-20 21:07 |
新米 居住地: 投稿: 6
使用環境:
winXP actionscript3 Flash cs3 |
Re: ガベージの制御 こんばんは
URLと丁寧なご回答ありがとうございます。 >・ローカル変数だと回収されるので、されたくないものはメンバー変数に格納する。 これについて質問なのですが、intやNumber型変数や参照用の変数もそうなのでしょうか? |
ゲスト | Åê¹ÆNo.45533 投稿日時: 2010-8-20 22:03 |
Re: ガベージの制御 そうですね、ただintやNumber型、String、BooleanといったものだとFlashコンテンツを開発していてGCの影響を受けることがあまりないので、多くは任意のオブジェクトのインスタンスで多いように思います(MovieClipインスタンスの参照や、Loaderインスタンス、Pointインスタンスの参照など)。
GCについて、私の遭遇したような事例とは次のような感じです。 ・Loaderクラスで外部ファイルを読み込んでいるが、ローカル変数でLoaderインスタンスを作成していたため、GCでLoaderインスタンスが削除され、読み込み完了イベントが行われなかった ・fl.motion.Tweenクラスで任意のムービークリップをトゥイーンしていたが、TweenインスタンスがGCで削除されトゥイーンが停止した。 http://d.hatena.ne.jp/yasu-log/20080627/1214574173 |
|
kenken5050 | Åê¹ÆNo.45572 投稿日時: 2010-8-25 9:46 |
新米 居住地: 投稿: 6
使用環境:
winXP actionscript3 Flash cs3 |
Re: ガベージの制御 返信ありがとうございます。
intやNumber,参照用の変数は4バイトとかなのでcなどで考えてしまうとメモリを確保しないと思っていました。 ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |