4

是否可以清除PHP中的所有资源?

我知道您可以使用未设置的get_defined_vars获取所有已定义的函数, 您可以轻松清除这些资源。

但这对我来说还不够。我有一个运行很长时间(~1h 30m)的脚本来执行许多功能..但是在执行时脚本收集了不再重要的信息..脚本导出产品并获得大约 0.2MB - 0.5MB 每个产品(3200 个产品)

那是超过 600mb 的内存使用量。我尽可能地优化了脚本,但我没有把它变小。

我可以使用get_included_filesget_declared_classes获取所有包含的文件;是否可以清除这些信息?删除类(除了一些需要的类,如自动加载器类)或其他包含的文件,以便我可以释放更多 RAM?

或者您知道在执行时优化服务器使用的其他方法吗?

也许这是一个愚蠢的问题,但我会很高兴每个提示都可以提高 PHP 脚本的性能。

脚本环境信息:脚本运行在旧的 Magento 1.4 版本上,缓存和性能存在很大问题;目前无法更新到较新版本。

4

3 回答 3

2

你有很多清除资源/内存的功能:

unset()对于变量

mssql_free_result对于 SQL

memory_get_usage()对于当前分配给 PHP 脚本的内存量(以字节为单位)。

ETC...

如果你混合所有东西,你可以减少内存/资源。

于 2012-08-01T14:59:54.467 回答
2

我们有一个脚本消耗了高达 2GB 的内存,并且疯狂地泄露了内存(它使用了 Doctrine 1.1)。

unset()ing尽我们所能,然后我们添加gc_enable()到脚本的顶部,并在gc_collect_cycles()战略位置。

这确实有助于回收一些已使用的内存,但确实使脚本减慢了一小部分。

于 2012-08-01T15:00:58.680 回答
1

问题不依赖于变量,而是依赖于算法。

在 think 脚本将所有值累积到一个大的“产品对象”数组中,该数组将在导出的文件中序列化。

为了精通内存,最好在构建后序列化每个产品,而不是在序列化之前累积所有产品以导出到数组中。

于 2012-08-01T14:56:50.943 回答