【问题标题】:Do php 5 try catches affect performance when no exception is caught?当没有捕获到异常时,php 5 try catchs会影响性能吗?
【发布时间】:2011-01-10 03:07:27
【问题描述】:

工作中非常聪明的人告诉我,尝试不抛出的捕获会影响拥有数百万用户的网站的性能。根据发布的单元测试显示相同的性能,我想知道这是否与操作系统级别和/或 Web 服务器特定情况有关。例如,Web 服务器异步工作的实现发生在子进程而不是线程上。

有人知道吗?

我希望看到的是 php profiler 的输出,显示了实际使用的 cpu 时间。

jmucchiello 对 Performance of try-catch in php 的评论很有趣,但并未衡量 CPU 使用时间。

谢谢, 大卫

【问题讨论】:

  • 为什么不向工作中的“非常聪明”的人索取一些证据呢? (根据可能存在的任何层次结构,我想这可能会很棘手。):-)

标签: php performance exception-handling


【解决方案1】:

我进行了一个非常小且不科学的测试,发现永远不会调用的 catch 与 try catch 语句之外的 catch 之间大致没有区别。我通过我的分析器运行这两个脚本中的每一个 5 次并平均总时间。

结果

  • 使用 Try/Catch 语句:1.34 秒
  • 没有 Try/Catch 语句:1.3 秒

代码

尝试/抓住

<?php
foreach(range(1,200000) as $i) {
    try {
         if ($i % 5 == 0 && $i % 3 == 0)    echo "fizzbuzz";
         elseif ($i % 5 == 0)               echo "fizz";
         elseif ($i % 3 == 0)               echo "buzz";
         else                               echo $i;
     } catch (Exception $e) {
         echo sin($i) * cos($i * pi());
     }
}

?>

没有尝试/捕获

<?php
foreach(range(1,200000) as $i) {
     if ($i % 5 == 0 && $i % 3 == 0)    echo "fizzbuzz";
     elseif ($i % 5 == 0)               echo "fizz";
     elseif ($i % 3 == 0)               echo "buzz";
     else                               echo $i;
}

?>

【讨论】:

  • 我同意这不科学等,但是这两个代码没有进行同等有效的计算(可以这么说)。 “Try/Catch”在循环中,在 catch 块内有非常昂贵的算术运算!
  • @ϹοδεMεδιϲ 我的想法是我想要一些昂贵的东西,这样它会甩掉执行时间,很明显,永远不会被命中的 catch 语句中的代码对执行时间没有影响。
猜你喜欢
  • 2010-12-18
  • 1970-01-01
  • 2019-07-12
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多