トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ガベージの制御
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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などで考えてしまうとメモリを確保しないと思っていました。

ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops