php - 用于存储数据的数组或对象 - 什么是更好的解决方案

时间:2013-03-28 17:42:40

标签: php arrays performance oop

我正在考虑什么会给我更好的性能和内存使用。我正在编写一个游戏地图。一切都存储在“地图”类中,但地图可能有数千个图块。现在我在想什么是更好的解决方案:

  • 将每个tile参数保存在xy数组中(tile x = 10,y = 11数据存储在数组中,如map [10] [11] = params)如果我想知道一些关于tile的内容,则调用不同的数组xy参数
  • 将图块视为对象并制作方法,它可以轻松返回图块的邻居,并且所有数据也作为数组存储在每个对象中。

因为我可能有数以千计的相似图块,所以第一印象是它最适合oop编程,但我担心数以千计的对象图块可能会使用更多的内存并且调用它的方法可能会更慢。你觉得怎么样?

Kalreg

3 个答案:

答案 0 :(得分: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阵列与对象内存使用情况和性能

的详细/精彩文章

答案 1 :(得分:1)

您正在开发一款绝对不能仅使用arrayobjects的游戏,您最有可能同时使用这两种游戏。

我认为你应该先了解How big are PHP arrays (and values) really? (Hint: BIG!)

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

答案 2 :(得分:0)

如果你有一个瓷砖网格,那么它很适合存储在一个数组中。

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

我会建议一组对象。