【问题标题】:Question about freeing memory in a php script关于在 php 脚本中释放内存的问题
【发布时间】:2010-11-16 05:59:53
【问题描述】:

我刚刚在脚本中看到了这个

mysql_free_result($rawdb);

我在某处的脚本上看到了它,它运行了一个 mysql 查询并将结果保存到一个数组中,在添加到数组之后,它运行了我假设空闲的 mysql 查询使用的内存。

我只是想验证一下,这样做是个好主意吗?我有几个 mysql 查询返回一个保存到数组中的大结果,我应该在它之后运行该代码吗?

同样在注重性能的环境中,在完成大型会话和变量后取消设置它们是否是一种好习惯?

【问题讨论】:

    标签: php mysql performance memory


    【解决方案1】:

    我不会担心的。所有结果资源都在脚本结束时被释放,除非您在对 large 结果集进行查询时遇到内存问题,否则差异可以忽略不计。

    也就是说,如果我正在阅读您的代码并看到 mysql_free_result,我会确定您不会在代码中的任何其他地方使用该资源,因此它可以增加一点可读性.. .

    【讨论】:

      【解决方案2】:

      我认为将数据抽象层放入您的数据抽象层是一种很好的做法,因为它使它成为内存处理的好公民。特别是因为很多 PHP 代码不是。 :-/

      内存使用问题在 PHP 4 中比在 5 中严重得多,但它仍然可能是一个问题。如果您必须不断提高 PHP 脚本允许的最大内存(默认为 8Mb,但我使用的大多数环境都设置为 64Mb),那么您可能应该考虑您的脚本如何使用和过度使用内存。使用mysql_free_result() 是这个武器库中的一部分,但它本身是毫无意义的。如果您使用mysql_unbuffered_query() 并在使用mysql_fetch() 检索每一行时处理每一行,则可以更有效地处理大型数据集。我已经看到,当使用这种方法重新编写脚本时,处理数据的脚本的能力会大大提高。

      【讨论】:

        【解决方案3】:

        对此in the PHP API documentation 进行了一些讨论。根据您的用例(即您正在检索的结果的大小),mysql_free_result() 可能会提高或降低性能。正如该链接底部的评论者所说,请致电memory_get_usage() 了解您是否应该释放结果。没有什么比实际检查您的资源使用情况更好的了。

        【讨论】:

          【解决方案4】:

          同样注重性能 环境是好习惯吗 取消设置大型会话和变量 什么时候完成?

          请注意,如果您从 $_SESSION 取消设置变量,您将有效地将它们从会话中删除:下次您的用户调用您网站的页面时,它们将不存在。

          因此,您可能需要谨慎对待这个想法:仅在您不再需要时从 $_SESSION 删除数据。

          关于unsetting 数据和/或使用mysql_free_result 之类的函数:考虑到您的脚本是 (我想,因为 PHP 是用于 Web 开发,用户不会等待数小时来加载页面) 只运行几百毫秒,以这种方式释放内存可能有点矫枉过正:只要您没有收到与 memory_limit 相关的错误,您可能就不必在意。

          【讨论】:

            【解决方案5】:

            来自manual

            mysql_free_result() 只需 如果您担心如何 大量内存用于查询 返回大型结果集。全部 相关的结果记忆是 结束时自动释放 脚本的执行。

            【讨论】:

              【解决方案6】:

              该函数的 PHP 手册页回答了您的大部分问题:

              http://us.php.net/manual/en/function.mysql-free-result.php

              【讨论】:

                猜你喜欢
                • 2017-09-08
                • 1970-01-01
                • 2016-05-22
                • 2023-02-13
                • 1970-01-01
                • 2011-02-08
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多