PHP - 是否可以实例化太多对象

时间:2014-03-19 12:14:34

标签: php

我有PHP程序,需要我实例化1800个对象,每个对象与7-10个填充历史数据的数组相关联(每个数组大约500个记录)。这个程序由cron每5分钟运行一次,而不是由用户。

无论如何,该程序的设计者说需要同时实例化1800个对象,而不是我们可以改变的东西。我的问题是,是否单独实例化这么多对象是一种“代码味道”,如果在内存中有这么多数据(由总共9,000,000条记录组成的数组),那么PHP就很难处理(假设足够)内存可在主机上使用。

由于

3 个答案:

答案 0 :(得分:2)

类和对象主要是一种概念工具,用于以逻辑方式组织代码,或多或少地适用于现实世界中的“事物”。在执行程序编写的代码与面向对象的代码时,计算机没有显着差异。与以最佳程序方式编写的代码相比,OO代码可能会增加一些开销,但您几乎不会注意到这种差异。可以在几毫秒内重复创建和销毁1800个对象。它们本身不是问题。

问题是:在OO中以这种方式编写它是否显着有助于代码组织?如果做得好,可能是的。有没有其他现实的方法以程序的方式编写相同的算法,显着执行速度更快?另一种方式是逻辑结构,可理解和可维护吗?代码级别质量的差异是否值得性能差异?用它的1800个对象真的太慢了吗?对象是瓶颈(可能是否)或整体算法是否成为瓶颈?

换句话说:没有理由担心1800个对象,除非你有一个明确的迹象表明它们是一个瓶颈,它们可能不属于自己。在没有对象包装器的情况下将相同的数据存储在内存中通常不会显着减少任何资源使用。

答案 1 :(得分:0)

作为初始化系统运行的所有对象的应用程序,它会很慢。现在我知道为什么你会像以前那样做 - 我会加载一个查找对象,以避免在我要查看的情况下进入数据库。

然而,每个阵列有500条记录的1800个对象 - 相当重,并且无法触及数据库。我知道记忆应该是可用的,但考虑到这是一个没有紧缩的负载 - 我不确定5分钟的cron会完成。

我建议使用分析器对此进行基准测试,以了解使用的内存和运行前的时间。

答案 2 :(得分:0)

对象本身的数量没有(实际相关)限制。只要有足够的物理RAM,您就可以随时增加memory llimit。但是,从体系结构的角度来看,在实际不需要的情况下,将所有这些保留在RAM中整个执行时间可能是非常不明智的。由于它们的高动态性,PHP阵列非常广泛,因此它可能会受到巨大的性能影响。但是,如果没有任何细节或分析,则无法给出明确的答案。

但可以肯定的是,需要这么多物品似乎很奇怪。 DBMS可能是处理此数据量的替代方法。