ページ 1 / 1
【解決】キャッシュされている量が可視化できるプラグインを探しています
Posted: 2020年3月29日(日) 16:49
by じょなさん!
現在、大量に画像を使うゲームを作っています。(ピクチャのアニメーション表現など)
ツクマテでいろいろと調べていくうちにキャッシュのことがじんわりと理解できてきました。
自分のゲームの場合だとキャッシュを大量にしてしまうタイプのゲームになります。
そのためキャッシュの上限を50まで上げたのはいいものの
自分が現在どれだけキャッシュをしているのか確認すべがなくて困ってしまっています。
(調べたところによると、画像枚数の意味ではないので余計に混乱しています…)
もし、確認する方法があるのなら教えていただきたく質問させていただきました。
また別の質問なのですが、特に意味もなく10から50まで上限をあげたものの
この数値の意味も正直理解できていません
もしこれを超えてしまうと具体的に一体どのような現象が起きてしまうのでしょうか?
Re: キャッシュされている量が可視化できるプラグインを探しています
Posted: 2020年3月29日(日) 17:13
by Plasma Dark
画像キャッシュ上限値については、くらむぼんさんのQiita記事及びそのリンク先の解説がわかりやすいです。
https://qiita.com/krmbn0576/items/d2192 ... 0%E5%80%A4
単位はMPixelということで、10なら 10,000,000 pixel 分だけの画像をメモリ上に展開しておけます。
キャッシュはあくまで一時的に展開しておくだけなので、これを越えて画像を読み込もうとすると、古い画像はキャッシュから追い出されます。
キャッシュから追い出された場合、次に利用する際にまたロードし直すことになります。
自分が現在どれだけキャッシュをしているのか確認すべがなくて困ってしまっています。
デベロッパーコンソールに以下のように入力すると、キャッシュしている画像一覧が取得できます。
コード: 全て選択
ImageManager._imageCache._items
上限値は画像のpixel数なので、そこまで知りたい場合はちょっと面倒ですが、以下のようになります。
コード: 全て選択
ImageManager._imageCache._items.map(item => item.bitmap.width * item.bitmap.height).reduce((a, b) => a + b, 0)
Re: キャッシュされている量が可視化できるプラグインを探しています
Posted: 2020年3月30日(月) 00:34
by じょなさん!
回答ありがとうございます!
ありがたい情報やサイトの方を拝見させていただきました。
とても勉強になり助かりました。
申し訳ないのですが、自分の解釈が間違っていないか不安なので質問をさせていただきます
1 上限を上げ、キャッシュしすぎるとPC側に負荷がかかり、
落ちたり、重くなったり、クラッシュする可能性がある。
2 キャッシュは画像の場合、容量ではなくピクセル数に影響する
3 メモリ2Gくらいの古めのPCだと上限30くらいが理想 上限を上げていくのなら、
それなりのメモリを求められるが具体的な数値は様々な環境で検証して確かめる必要がある
4 上限を超えたところで超えたキャッシュは取り込んだ順に吐き出せれるだけ。
そのため、よく使う画像はイベントの事前に並列などで裏で読み込みをさせておくように組んでおけば問題ない
また、一度しか読み込みが必要ないものがあった場合、
キャッシュをいちいち吐き出さす必用はなく勝手に吐き出すので何も気にしなくていい
________________
以上となります
Re: キャッシュされている量が可視化できるプラグインを探しています
Posted: 2020年3月30日(月) 04:48
by Plasma Dark
概ね問題ない理解ですが、4だけ補足させてください。
4 上限を超えたところで超えたキャッシュは取り込んだ順に吐き出せれるだけ。
そのため、よく使う画像はイベントの事前に並列などで裏で読み込みをさせておくように組んでおけば問題ない
また、一度しか読み込みが必要ないものがあった場合、
キャッシュをいちいち吐き出さす必用はなく勝手に吐き出すので何も気にしなくていい
RPGツクールMVの画像のキャッシュには2種類の方法があります。
(画像読み込みの方法 load と reserve でキャッシュに関わる挙動が変わります)
loadで読み込んだ画像は、キャッシュが溢れるタイミングでキャッシュから追い出されます。
一方、reserveで読み込んだ画像は追い出しの対象になりません。
reserveは常にメモリ上に置いておきたい画像に対して用いるのみにとどめ、基本的にはload(あるいは、requestでも良い場合はそちら)で読み込むと良いでしょう。
あまり頻繁にloadするとI/Oの負荷でゲームがカクつくことにもなりかねませんので、常時読み込みイベントを裏で走らせるという方法はオススメしません。
もちろん、イベントの事前に読み込ませておくこと自体は有効ですので、適切なシーンで画像を読み込むようにしましょう。
Re: キャッシュされている量が可視化できるプラグインを探しています
Posted: 2020年3月30日(月) 20:43
by じょなさん!
ご丁寧に回答ありがとうございました!
キャッシュの理解を深めることができたので今後気持ちよく開発ができそうです。
今回は質問に答えてきただき本当にありがとうございました。