• PHP try catch finally性能测试


    2021年7月10日20:13:47

    环境windows10 php8,没开jit 和opcache

    <?php
    
    $start = microtime(true);
    
    for ($i = 0; $i < 50000; $i++) {
        echo 'exception1';
    }
    
    echo '<br>' . __LINE__ . "行,执行的时间为" . (microtime(true) - $start) . " seconds<br>";
    
    /*
     * 9行,执行的时间为0.0081369876861572 seconds
     * 9行,执行的时间为0.015490055084229 seconds
     * 9行,执行的时间为0.016555070877075 seconds
     * 9行,执行的时间为0.01918888092041 seconds
     */
    
    for ($i = 0; $i < 50000; $i++) {
        try {
            throw new Exception("exception2");
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }
    
    echo '<br>' . __LINE__ . "行,执行的时间为" . (microtime(true) - $start) . " seconds<br>";
    
    /*
     * 26行,执行的时间为0.044734001159668 seconds
     * 26行,执行的时间为0.051358938217163 seconds
     * 26行,执行的时间为0.04113507270813 seconds
     * 26行,执行的时间为0.049375057220459 seconds
     * 26行,执行的时间为0.038452863693237 seconds
     */
    
    for ($i = 0; $i < 50000; $i++) {
        try {
            throw new Exception("exception2");
        } catch (Exception $e) {
    //        echo $e->getMessage();
        }
    }
    
    echo '<br>' . __LINE__ . "行,执行的时间为" . (microtime(true) - $start) . " seconds<br>";
    
    /*
     * 44行,执行的时间为0.019383192062378 seconds
     * 44行,执行的时间为0.01354193687439 seconds
     * 44行,执行的时间为0.018233060836792 seconds
     * 44行,执行的时间为0.021934032440186 seconds
     * 44行,执行的时间为0.016831874847412 seconds
     */
    
    for ($i = 0; $i < 50000; $i++) {
        try {
            echo 'exception3';
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }
    
    echo '<br>' . __LINE__ . "行,执行的时间为" . (microtime(true) - $start) . " seconds<br>";
    
    /*
     * 62行,执行的时间为0.023373126983643 seconds
     * 62行,执行的时间为0.014019012451172 seconds
     * 62行,执行的时间为0.019998073577881 seconds
     * 62行,执行的时间为0.012282848358154 seconds
     * 62行,执行的时间为0.021692991256714 seconds
     */
    
    for ($i = 0; $i < 50000; $i++) {
        try {
            throw new Exception("exception2");
        } catch (Exception $e) {
            echo $e->getMessage();
        } finally {
            echo "exception5";
        }
    }
    
    echo '<br>' . __LINE__ . "行,执行的时间为" . (microtime(true) - $start) . " seconds<br>";
    
    /*
     * 82行,执行的时间为0.05253005027771 seconds
     * 82行,执行的时间为0.056346893310547 seconds
     * 82行,执行的时间为0.048244953155518 seconds
     * 82行,执行的时间为0.062366962432861 seconds
     * 82行,执行的时间为0.067360877990723 seconds
     */

    每个都是单独运行,注释其他的

    结论是:执行五万次,使用try catch的性能确实不如,直接输出,时间消耗是直接输出的大概2倍到2.5倍,但是注意是连续执行五万次,单次执行基本毫无性能损耗,如果你追求极致高性能,可以尝试自己在异常发生前自己返回

    不使用try catch,但是普通项目直接使用是完全没问题的

    但是finally 会比 try catch额外在多消耗一点性能

    QQ群 247823727 博客文件如果不能下载请进群下载
    如果公司项目有技术瓶颈问题,如有需要,请联系我,提供技术服务 QQ: 903464207
  • 相关阅读:
    skynet源代码学习
    白话经典算法系列之七 堆与堆排序
    数据结构与算法二
    [hadoop系列]Pig的安装和简单演示样例
    感动前行——给医学媳妇写的演讲稿(非IT类)
    怎样提高团队管理能力3
    Linux守护进程的编程实现
    人脸识别 开放书籍 下载地址
    Objective-C中经常使用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect
    动态规划整理(两)
  • 原文地址:https://www.cnblogs.com/zx-admin/p/14995164.html
Copyright © 2020-2023  润新知