haniwaのガラクタ箱 in the ショートコント

日々の思いついたこと(多くはショートショート)、ゲームの企画、映画批評など


テーマ:


haniwaのガラクタ箱 in the ショートコント-PSM_T_AND_S20

haniwaのガラクタ箱 in the ショートコント-PSM_T_AND_S21

ローディング画面とか、やられたときの処理、いろいろ作ってます。

AD
いいね!した人  |  コメント(2)  |  リブログ(0)

テーマ:

最近はじめてDispose(メモリの解放)を確認しました。
今までは、噂には聞いていた程度でした。


いやはや、お恥ずかしい。


プログラムのヘルプとか、ネットに、Disposeメソッドがあるものは
いらなくなったらDisposeするべきと、書いてあったので


Sprite.Dispose()とやっても、そんなメソッドはないと表示されるので、


SpriteTile(私はこのスプライトクラスを主に使っている)クラスにはない、
ないものはしなくていいんだと、少し腑に落ちなかったが、
納得していました。


しかし、ネットとかヘルプとかには画像や音楽ファイルを読み込んだら
Disposeするべきと書いてあり、


???


といった感じでした。
(もちろんSpriteは画像を読み込む)


しかし、また別のところにガベレージコレクションがいらなくなったところを
勝手に解放してくれると書いてあり、

また、腑に落ちないけど、納得してました。


しかし、ヘルプをきちんと読むと、

newして、読み込んだときはガベレージコレクションが解放してくれるが
画像などを読み込んだときはしてくれないと書いてあり
(このことをアンマネージドリソースというそうです。)


びっくりして、調べなおすとありました。


Dispose!!


正確に言うと

Sprite.Dispose()

ではなく、


Sprite.TextureInfo.Dispose();


でした。

Spriteのメンバ変数TextureInfoに、あったんです。

Sprite.TextureInfo.Dispose();の前後でメモリをダンプすると
きちんとメモリの解放が行われています。


すばらしい。

あーよかった。
すっきりした。


しかし、私の中の疑問がまだあります。


ここまで、Disposeの存在をしらなくても問題なかったのは
私のゲームがメモリをあまりつかわないことにあります。


つまり、VitaというかPSMの最大メモリ96MBを超えなかったからです。
(Vitaのマックスは512MB+128MBある)


なんだ、お前のゲームちいせいなぁと思うかもしれませんが、


こんなんインディーズゲームとしては普通ですよ。


96MBフルで使うインディーズゲームなんか、ごく一握りですよ。


ゆえに、メモリを無駄に何回も読み込むなどという
バグない限りDiposeが必要がない
(もちろんプログラムを終了させるとメモリの解放が行われる)
とも言えるわけです。


でも、ネットでかなりの確立でDisposeの議論がなされ
(ちょっと前の私のように理解していない人は結構いる)
そのたびにきちんとDisposeをしメモリの管理をするようにと
議論の結論がいく。


みんな、すごいなぁ

Dispose()をきちんと必要な
でかいゲーム(アプリ)作ってんだなぁ。


わけがわからん。


ちなみに、今回のDiposeのサンプルソースは以下のとおり。


public Sce.PlayStation.HighLevel.GameEngine2D.SpriteTile TitleSprite { get; set; }

public Title ()
{
TitleSprite = Support.TiledSpriteFromFile("/Application/assets/Title03.png", 1, 1);
}

public void Term()
{
TitleSprite.TextureInfo.Dispose();
}

AD
いいね!した人  |  コメント(0)  |  リブログ(0)

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。