3

パフォーマンスとメモリ使用量を改善する方法を考えています。ゲーム用のマップをプログラミングしています。すべてが「マップ」クラスに格納されますが、マップには何千ものタイルが含まれる場合があります。今、私はより良い解決策を考えています:

  • すべてのタイル パラメーターを xy 配列に保持します (タイル x = 10、y = 11 のデータは map[10][11] = params のような配列に格納されます)。タイルについて何か知りたい場合は、xy パラメーターを使用して別の配列を呼び出します。
  • タイルをオブジェクトと見なしてメソッドを作成すると、タイルの隣接オブジェクトと、各オブジェクトのどこかに配列として格納されているすべてのデータを簡単に返すことができます。

私は何千もの同様のタイルを持っている可能性があるため、最初の印象は oop プログラミングに最適であるということですが、何千ものオブジェクト タイルがはるかに多くのメモリを使用し、そのメソッドの呼び出しが遅くなる可能性があるのではないかと心配しています。あなたはそれについてどう思いますか?

カルレグ

4

3 に答える 3

4

使用しているphpのバージョンによって異なります。使用しているバージョンが PHP5 以上の場合 (最新の php バージョンは、ゲーム アプリのパフォーマンスが向上することを意味します)、配列とオブジェクトの両方を使用すると、アプリケーションでほぼ同じパフォーマンスが得られます。したがって、PHP 5 以降を使用している/使用できる場合は、都合に応じて配列またはオブジェクトを使用できます。

Aron Novak によるこの配列とオブジェクトの比較/テストを確認してください: http://aggregation.novaak.net/?q=node/227。私はそれをアーロン・ノヴァクスの言葉で次のように引用しています。

I created a small script to find out which data structure has better performance. You can find the script what I used for the test at the attachments.
My test results are:
    data structure          PHP4        PHP5
    object                  61.6224     37.576
    array                   57.6644     37.866

    The results are in milliseconds(ms). It seems that in PHP5 the data structure is totally indifferent, in PHP4 there is approximately 7% performance gain if use arrays instead of objects.
    "This revolution, however, left PHP's object model mostly unchanged from version 3 – it was still very simple. Objects were still very much syntactic sugar for associative arrays, and didn't offer users too many features on top of that." (http://devzone.zend.com/node/view/id/1717)
    So the syntactic sugar is not a bad thing at all :) And it costs almost nothing. This is an explanation why all the parsers' output uses objects.

このhttp://we-love-php.blogspot.com/2012/06/php-memory-consumption-with-arrays.htmlをチェックして、 PHP 配列とオブジェクトのメモリ使用量とパフォーマンスに関する詳細で優れた記事を確認してください。

于 2013-03-28T17:51:13.843 に答える
1

あなたはゲームを開発していて、どちらかしか使えないarrayobjects、ほとんど両方を使う可能性が高いです。

最初に理解しておくべきだと思いますPHP 配列 (および値) は実際にはどのくらいの大きさですか? (ヒント:大きい!)

配列を置き換えてSplFixedArray オブジェクトを格納するとSplObjectStorage、コードが改善されるはずです。

于 2013-03-28T17:54:36.200 に答える
0

タイルのグリッドがある場合、それは配列に格納するのに非常に適しています。

しかし、それらのタイルに多くの情報が添付されている場合、それはオブジェクトに役立ちます。

オブジェクトの配列をお勧めします。

于 2013-03-28T17:47:47.603 に答える