You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简洁高效地测量若干函数的总耗时?

多函数总耗时统计方案(完善优化版)

嘿,你这个用RAII(资源获取即初始化)自动计时的思路真的很巧妙!我帮你把未完成的代码补全并做了细节优化,这样就能轻松实现多个函数的总耗时统计,而且用法超省心。

完整实现代码

#include <map>
#include <iostream>
#include <chrono>
#include <string>

using namespace std;

// 全局存储函数名与对应总耗时(单位:秒)
map<string, double> time_data;

struct TimeGuard {
    string func_name;
    chrono::high_resolution_clock::time_point start_time;

    // 构造时自动记录函数名与开始时间
    TimeGuard(string name) : func_name(move(name)), start_time(chrono::high_resolution_clock::now()) {}

    // 析构时自动计算耗时并累加到全局统计容器
    ~TimeGuard() {
        auto end_time = chrono::high_resolution_clock::now();
        chrono::duration<double> elapsed = end_time - start_time;
        time_data[func_name] += elapsed.count();
    }
};

// 统一打印所有函数的耗时统计结果
void print_time_stats() {
    cout << "\n=== 函数耗时统计结果 ===" << endl;
    for (const auto& [func_name, total_time] : time_data) {
        cout << "函数 [" << func_name << "] 总耗时: " << total_time << " 秒" << endl;
    }
}

// ------------------- 使用示例 -------------------
void image_process_func() {
    TimeGuard timer(__func__); // 用__func__自动获取当前函数名,避免手动拼写错误
    // 模拟图像处理逻辑
    for (int i = 0; i < 150000000; ++i);
}

void data_calculate_func() {
    TimeGuard timer(__func__);
    // 模拟数据计算逻辑
    for (int i = 0; i < 300000000; ++i);
}

int main() {
    // 多次调用函数,测试耗时累加效果
    image_process_func();
    image_process_func();
    data_calculate_func();

    print_time_stats();
    return 0;
}

核心设计亮点

  • 自动计时无遗漏:TimeGuard对象在函数创建时启动计时,函数执行完毕自动销毁时计算耗时,完全不用手动调用“结束计时”,彻底避免漏写的问题。
  • 总耗时自动累加:用map<string, double>存储统计数据,同一个函数多次调用时,耗时会自动累加,完美满足“总耗时”的统计需求。
  • 高精度计时:使用chrono::high_resolution_clock,这是C++标准库中精度最高的时钟,能覆盖绝大多数性能测试场景。
  • 减少人为错误:用编译器内置宏__func__自动获取当前函数名,不用手动输入字符串,避免拼写错误。

运行效果示例

执行后会输出类似这样的结果:

=== 函数耗时统计结果 ===
函数 [image_process_func] 总耗时: 0.281 秒
函数 [data_calculate_func] 总耗时: 0.563 秒

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:35:00