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 。我在下面用 Aron Novaks 的话引用它:

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

您正在开发一款游戏,绝对不能只使用array,或者objects您很可能同时使用两者。

我认为您应该首先了解PHP 数组(和值)到底有多大?(提示:大!)

将您的数组替换为SplFixedArray 并将您的对象存储SplObjectStorage在您的代码中应该会得到改进。

于 2013-03-28T17:54:36.200 回答
0

如果你有一个瓦片网格,那么它非常适合存储在一个数组中。

但是,如果这些图块上附加了很多信息,那么它就适用于对象。

我会建议一组对象。

于 2013-03-28T17:47:47.603 回答