[スポンサードリンク]
[スポンサードリンク]

【PSM+MonoGame】SpriteBatch.Endで出る「OutOfMemoryException」

SpriteBatch.BeginとEndの中でDrawを呼んでいるかと思いますが、マップチップを描画したりするときに、大量にSpriteを登録すると「OutOfMemoryException」が発生することがあります。


SpriteBatchの内部では2000個として配列が確保されていたのですが、32*32のマップチップで960*544を埋めるだけで510個、マップチップの配置具合によっては10階層まで描画されるので510*10=5100個! ということでオーバーしてしまっていたようでした。 (そんなに描画するほうが悪いのですが、テストプログラムだったので・・・) はて、どうしたものかと悩んでいたら、Nearealさん「SpriteBatchによる描画の並列化」という記事で「複数のSpriteBatchを用意して」という話がありました。 (実際は、複数のSpriteBatchを用意、並列化してパフォーマンス向上という高レベルなお話です・・) なるほど、SpriteBatchを複数作ればよかったのかという結論になりました。 実装的にも簡単です。 実際使う場合には、まずは「batch1」でDrawしつつ、Drawした回数を数えておいて、 回数が一定数を超えたら「batch2」を使うようにする・・という仕組みにすればOKかと思います。 とはいえ速度的には、1個のSpriteBatchにまとめたほうが早いということだったので できるだけ1個にまとめておきたいところですね。
[スポンサードリンク]
コメントフォーム