DXライブラリの管理人さん頑張り過ぎですよ、2200個もJava版の関数作るの大変・・・。
さて、ある程度出来てきたので、気になるパフォーマンス比較です!
全方向に下のような○万個の弾を発射して、fpsを比較します。
[youtube][/youtube]
最初2万弱の弾を持つ弾幕で処理落ちを試してみようとしたら・・・全く処理落ちしない!これは案外すごいかも・・。
ってことで、1.7万~14万の弾幕でJavaとC++でfpsの比較をしてみました。
※環境:Core i7 860、Geforce 9600GT、メモリ 16G (ニコ生再生しながら)
結果、ほとんど変わらない!
弾幕の作り方は、JavaとC++でほとんど変わりません。
JavaはLinkedListに毎回newで突っ込んで、画面外に出たら解放しているので、GC的によろしくないと思っていましたが、そんなこと完全に無視できそうな結果です。
# 訂正:1分に1.3回しかGCは働いていませんでした。
更に1フレーム30万個の弾を持つ弾幕で「Update」「Draw」にどれ位時間がかかっているか比較してみました。
[table=border:1px solid #cccccc;][tr=text-align:center;][td=border:1px solid #cccccc;][/td][td=border:1px solid #cccccc;] Java [/td][td=border:1px solid #cccccc;] C++ [/td][/tr]
[tr=text-align:center;][td=border:1px solid #cccccc;] Update [/td][td=border:1px solid #cccccc;]56[/td][td=border:1px solid #cccccc;]32[/td][/tr]
[tr=text-align:center;][td=border:1px solid #cccccc;]Draw[/td][td=border:1px solid #cccccc;]120[/td][td=border:1px solid #cccccc;]115[/td][/tr][/table]※単位[ms]
なるほど、描画はほとんど変わらず、軌道計算やメモリ確保・解放部分で差が出ているもよう。(C++もnew,deleteしてますが)
しかし3.5万個の弾で60FPS処理落ちなしって、DXライブラリこんなに高速でしたっけ・・・。
日々パフォーマンスは改善されているのかもしれません。
Java版でパフォーマンスが落ちたらイヤだな~と思っていましたが、嬉しい結果になってよかったです♪