メイン コーダーズルーム【スクリプト系】 同じ変数やレジスターに連続的にNewしてメモリーリークが起きるか(結果:起きない) | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
Fla4man | Åê¹ÆNo.20921 投稿日時: 2005-10-19 14:41 |
職人 居住地: かまくら 投稿: 517
使用環境:
WinMe,Win2000, Flash4,アズさん,大仏、delphi |
同じ変数やレジスターに連続的にNewしてメモリーリークが起きるか(結果:起きない) Flash8で行列演算関係がネイティブになって
polarとか特にガシガシ使おうと思ったのですが(Flash8はもってないけど) 一つ気になることがありました。 質問しようと思ったのですが 自分で確認できそうなのでそれなりにやってみました。 それはFlash8の行列関数は結構NewmethodでPoint変数を新規生成するものが多いので ちゃんと開放しないでおなじ変数名を使ってしまうと 最後に作ったオブジェクトだけが開放されて オブジェクト(レコード)そのものメモリーが残ってしまうのでは無いかということです 最適化されたプログラミング言語の場合は大抵Freeとかdisposeか 自動開放用に親コンポーネントに登録とかするので釈然としなかったのです。 明示的な変数ならまだしも 特に私のように最初からレジスターだけ使ってやるような場合 どうなのだろうか。特にそこが気がかりでした。 テストはhtmltextにAタグでfunction Test1を呼び出し そこで基本となるPointとmatrixを作っておいて setintervalで0.1s間隔でfunction2 Test2を呼び出すというもので 呼び出されTest2側は Push 'matrix' getbariable setregister r:2 pop Push 'Point1' getbariable push 1,r:2,'transformPoint' callmethod setregister r:4 pop // //Asでいうと //Point2=matrix.tarnsformPoint(Point1) // のあとに Push 0.017453,1,r:2,'rotate' callmethod pop //matrix.rotate(2π/360) push r:4,1,r:2,'transformPoint' callmethod setregister r:4 pop //Point2=matrix.tarnsformPoint(Point2)//同じところに生成 を8回繰り返すというものです。 繰り返した後動的に生成したテキストボックスに ループカウントと(r:4).'x'を表示させました。 xの値は回転を繰り返してから再代入していないのであまり意味は無いです。 監視はタスクマネージャーのIEのメモリ使用量を見ています。 もしも開放忘れがあると一回のループで 最低でも'x'と'y'の2つの変数分の8倍で64byteは消費するはずで 最初ドンドン増えていたのでギョッとしたのですが 40ループで1kbyteふえるはずが setintervalの回数が20000回を越えても変化はなかったので 開放されていると判断しました。 同じ変数にNewmethodで割り当てても いらんくなったオブジェクトはおのおのスコープがはずれた段階で 自動的に開放されるから ちょっとずつ動かして代入する演算とかも geomのPoint生成系関数に対して不必要に変数を用意する必要は無い とわかり安心した次第です。
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |