募集要項

  • ■ボイスの募集は終了しました。

    非常に沢山のご応募ありがとうございました!

     結果はこちら
2017年9月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

« 【Unity Action】 久しぶりの更新 | トップページ | 【Unity Tips】Mayaからのカメラアニメーション&FOVのインポート ※考察 »

2012年11月13日 (火)

【Unity Action】使用メモリ量を常に視覚化しよう!

現在使えるスキルに合せてリソースを読み分けする処理実装を進めていますが、
それに伴い、ちゃんとリソースを動的に読み捨てできているかどうか見るために
メモリの使用量を表示する事にしました。

今回使用する処理は以下の2つ。

//メインメモリの容量(メガバイト換算)
SystemInfo.systemMemorySize
//プログラムによって使用されるヒープサイズ(バイト単位)
Profiler.usedHeapSize

1MB=1048576B って事で、表示に使う文字列は以下の様な感じかな?Profiler.usedHeapSize/1048576 + " / " + SystemInfo.systemMemorySize + " MB"

この文字列をfps表示と同時に画面に表示するようにしましょう。
で、実行すると以下のような形になりました。
※Androidでテスト
121113

注意点として、実機環境ではビルド時にDevelopment Bulidにチェックを入れて無いと
usedHeapSizeが使えない(0になる)ようです。

値の目安としては
http://www.slideshare.net/colopl/unity-12567389
のスライドにある100Mを超えないように、でしょうか。
現状ではなんとかセーフ?(重い時で70Mくらい)。

というかこれは最初から入れておくべきだった気もします…
このあたりはデザイナーも常に気にするべき所ですね。
どうも意識が低くなりがちです><;

これで安心してリソースの分離処理の続きができる!
・・・はず・・・!

※11/13 22:25追記----------------------------------------

コメントにてSonoさんから頂きました、
System.GC.GetTotalMemory() を使用する方法も試してみました。
情報提供ありがとうございます!
(参考)
http://wiki.unity3d.com/index.php/AllocationStats

121113_

画面左上のウィンドウが参考URLのスクリプトを反映したものです。
上から
・現在割り当てられているメモリ
・割り当てメモリのピーク
・メモリの収集頻度
・最後の収集との差分

といった所でしょうか(多分)
fps表示もセットでついてますね。

で、現在の割り当てメモリは
(int)System.GC.GetTotalMemory(false)
で取得しているようでしたので、そちらを使用してみましたが、

Profiler.usedHeapSize
の処理では常時(ある程度)数値が安定してたのですが、

(int)System.GC.GetTotalMemory(false)
の方では数値が徐々に上昇し、一定以上まで行くと
リセット(不要な領域を自動解放?)される挙動を繰り返していました。
ちょっと確認しにくいですね…。

そういった意味で、
一旦Profiler.usedHeapSizeの方を使おうかと思います。
とはいえデバッグビルドが面倒になったら

GetTotalMemoryの方に切り替えるかもしれません(汗

※他、アドバイスや指摘等あれば随時頂けると幸いです><;

« 【Unity Action】 久しぶりの更新 | トップページ | 【Unity Tips】Mayaからのカメラアニメーション&FOVのインポート ※考察 »

Unityアクションゲーム製作」カテゴリの記事

コメント

System.GC.GetTotalMemory() ならば、Development Bulidにしなくてもメモリの使用量が分かりますぅ。

僕は、ココのソースを参考にデバッグ表示させてます。
http://wiki.unity3d.com/index.php/AllocationStats

Sonoさん情報ありがとうございます。
帰宅したら早速試してみます!

ここにメモリのことが少し書かれていました。
http://docs.unity3d.com/Documentation/Manual/MobileProfiling.html

まとめると、以下のような感じです。
●usedHeapSize は確保されているメモリ量で、増えることはあっても減ることはない。
●GetTotalMemory は実際に使用中のメモリ量なので、ガベージコレクションで増減する。

>リソースを動的に読み捨てできているかどうか見るために
これが目的ならば、GetTotalMemory の方が良いかと思われます。

ちなみに、
>リセット(不要な領域を自動解放?)される挙動を繰り返していました。
これがガベージコレクションです。

>Sonoさん
追加情報ありがとうございます。
丁度今見ようとしたらサイトがメンテ中でした・・・><;
後で改めてサイトを見てみます。

また、昨日一応試してみてはいたのですが、
usedHeapSizeで表示されているメモリ量に関しては、
Resources.Loadで読み込んだファイルを消す際にnullを代入して
Resources.UnloadUnusedAssets();
を行えばその分のusedHeapSizeの値は減ることを確認しています。
なので、ちゃんとUnloadさえすればリソースの増減の確認はできるかなと思ってます。

例:※同一シーンでResources.Load/UnloadUnusedAssetsを使用している作りで確認
メニュー(約35MB)→バトル(バトル用のリソース読み込み)(約70MB)→メニュー(バトル用のリソース解放)(約35MB)

上記も踏まえてusedHeapSizeを現状は選択させて頂いている状態です。
とはいっても調べ方はまだまだ浅いのは事実なので、後々追記するかもしれません。

>これがガベージコレクションです。
把握はしてたのですが、
実際の挙動として見たのは初だったので
曖昧な書き方にしてました。
補足ありがとうございます。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1500357/47823241

この記事へのトラックバック一覧です: 【Unity Action】使用メモリ量を常に視覚化しよう!:

« 【Unity Action】 久しぶりの更新 | トップページ | 【Unity Tips】Mayaからのカメラアニメーション&FOVのインポート ※考察 »

Twitter等

  • にほんブログ村 ゲームブログ ゲーム制作へ

メールフォーム

  • 直接コンタクト取りたい方はこちらからどうぞ

サイト内検索
ココログ最強検索 by 暴想