【问题标题】:how to reduce memory usage in image gd or speed up the process to deallocate memory faster如何减少图像 gd 中的内存使用或加快进程以更快地释放内存
【发布时间】:2011-05-21 07:27:28
【问题描述】:

我有一个图像 GD 脚本,目前使用了大约 9MB 的内存。 我的流量很大,因此有时它会占用我服务器上的大量 RAM。

有什么方法可以减少图像 gd 的内存使用? 或者至少使脚本进程更快,以便它更快地取消分配它正在使用的内存。

我已尝试更改图像质量,但没有效果。 我还尝试更改图像像素大小,它减少了内存使用量,但并不多。

谢谢。

【问题讨论】:

    标签: php gd memory-management


    【解决方案1】:

    不看代码就无法判断,但除非它包含任何重大错误,否则答案可能是否定的。

    您可以做的是改用外部imagemagick 二进制文件——它在PHP 的脚本内存限制之外运行——但这是一种完全不同的技术,需要你重写代码。

    我假设您已经在缓存 GD 的结果,所以不是每个请求都会导致它运行?

    【讨论】:

    • 有很多代码要展示,但我会尝试向您解释我正在使用代码做什么。我有一个图像文件,还有大约 10 个其他小缩略图图像和大约 40 个其他字符串,它们将放在该图像文件上。我认为缓存可能无济于事,因为每次都会生成新图像,因为缩略图/字符串每次都在不断变化。有什么帮助吗?
    • @Anil 嗯,这听起来确实很难缓存。除了一些可能可能的内存优化(比如在你不再需要它们之后立即取消设置变量等)我认为优化的潜力不大
    • 我已经取消设置变量。你认为图像 GD 有什么方法可以更快地处理吗?以便脚本更快地完成并释放内存以为其他请求腾出空间。
    • @Anil 除了购买更快的服务器,我不这么认为。
    • 看起来我可能需要将我的 Web 应用程序移动到云服务器。流量高峰有时会吃掉我的整个 RAM。不过感谢您的帮助:)
    【解决方案2】:

    如果您担心内存限制,请尽量避免使用动态映像 GD。 不看代码很难解决问题,但我可以提出建议。

    让不同的进程处理图像,例如,如果您想调整图像大小,请不要在每次用户访问页面时调整它们的大小,而是运行 cron 或带有窗口的调度程序来调整所有需要调整的图像大小定期调整大小并保存它们。所以开销会更少。

    如果您提供更多代码,您将获得更好的帮助

    【讨论】:

    • 有很多代码要展示,但我会尝试向您解释我在用代码做什么。我有一个图像文件,还有大约 10 个其他小缩略图图像和大约 40 个其他字符串,它们将放在该图像文件上。每次缩略图/字符串都不同。我也不能使用 cron,因为我必须立即向最终用户显示输出图像。
    • 听起来您正在使用这些图像进行验证码,渲染时图像的像素有多大?也许制作更小的图像会有所帮助
    • @lbu,不,它不是验证码,而是类似的东西。是的,减小图像大小有助于减少内存使用量,但作用不大。遗憾的是,在我的 Web 应用程序中,减小图像大小不是我的选择。
    猜你喜欢
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多