【问题标题】:Replace complex PHP code with C code用 C 代码替换复杂的 PHP 代码
【发布时间】:2011-05-04 01:37:00
【问题描述】:

我使用 PHP 查询 Oracle 数据库,但在某个时候,可能是由于 PHP 代码非常复杂,我遇到了内存泄漏。我正在努力解决这个问题,但我问你:如果我将所有复杂的 PHP 代码转换为 C 代码,并在需要时从 PHP 调用“exec”,我是否会在性能和内存优化方面有所收获?或者这是一个坏主意?为什么?

【问题讨论】:

  • 猜猜这取决于你的 C 代码是否也有内存泄漏。让我们看看有问题的 PHP 代码。也许可以修复。
  • 这是个坏主意。如果你不能写出正确的 PHP,你会在 C 中受苦。
  • 嘿,谁说我不会写正确的 PHP(甚至 C)???

标签: php c exec


【解决方案1】:

任何复杂性都是相对的。如果您无法分解复杂性,那么用另一种形式或语言编写它也无济于事。

简而言之:没有上下文就无法回答。

【讨论】:

    【解决方案2】:

    一般来说,您将失去性能,因为系统必须生成另一个进程并等待它终止,然后才能返回您的 PHP 脚本。 PHP 中的内存泄漏是我很少看到的,尽管它们可能会发生。它也可能是泄漏内存的底层 C 包装器(例如,Oracle DB 包装器)。安装像Xdebug 这样的调试器可以帮助你找到这个泄漏的原因。

    我建议你阅读:Finding cause of memory leaks in large PHP stacks

    PHP 5.3 还引入了garbage collector

    【讨论】:

      【解决方案3】:

      只是一个半相关的想法:

      http://github.com/facebook/hiphop-php/wiki

      HipHop for PHP 转换 PHP 源码 将代码转换为高度优化的 C++。它是 由 Facebook 开发并发布 作为 2010 年初的开源项目。

      【讨论】:

      • 但是,整个应用程序必须“转换”,不能简单地转换单个脚本/类;并且您仅限于优秀的 Facebook 人员重建以与 HipHop 一起运行的模块
      • 当然——它只是一个旁白,虽然它是开源的,所以你可以选择(如果你有知识的话)按照你认为合适的方式进行定制
      【解决方案4】:

      如果您想用 C 重写代码,那么最好将其编写为 PHP 模块,而不是使用 exec() 从 PHP 调用的独立程序。

      【讨论】:

      • 您好,感谢您的回复。事实是,由于某些原因,我无法在这里轻松解释,我无法编写 PHP 模块,也无法更改 PHP.ini 中的 memory_limit。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多