【问题标题】:Get the execution time of each line of code in c++获取c++中每一行代码的执行时间
【发布时间】:2019-12-11 04:00:30
【问题描述】:

在我当前的项目中,部分代码需要 30 多分钟才能完成该过程。我发现时钟函数是获取方法执行时间的最佳选择,但是有没有其他方法可以获得代码行的最长时间?否则我必须用时钟功能记录每个方法,这对我来说将是一个复杂的过程,因为这确实是一个巨大的项目,需要永远完成。

【问题讨论】:

  • 但是有没有其他方法可以获得代码行的最大耗时? -- 是的,它被称为 profiler
  • 欢迎来到 Stackoverflow。您正在寻找的内容称为“分析”。有很多关于它的信息。你可以从这里开始:stackoverflow.com/questions/2624667/…
  • 对于初学者,VS 调试器会显示每条语句的每步毫秒数。
  • 我用过(你应该学习如何使用)std::chrono。但我最喜欢的函数(用于测量持续时间)是 posix 函数,“int status = clock_gettime(CLOCK_REALTIME, &ts);”它访问系统范围的实时时钟。 “struct timespec ts”具有纳秒级的因子。您将测量 3 个位置...开始、近似中间、结束,将代码分成 2 部分。你的慢功能应该在第一部分或第二部分。移动你的测量点,然后重复。是的,你可以测量很多持续时间并放在一个向量中。
  • 我尝试运行 vtunes 放大器工具,但它似乎只适用于 .exe。我有一个工具可以运行将数据上传到数据库表和 xx.dll(这是我必须改进的 dll性能)在我运行该工具时被调用。我在完成瓶颈后检查了分析状态,它显示了函数地址而不是函数名称,甚至该函数属于工具而不是 xx.dll 乐趣。是否有支持 dll 分析的工具,因为当前 dll 依赖于 windows 服务。我对分析真的很陌生,所以我不知道如何处理这种情况。

标签: c++ visual-c++ performance-testing stopwatch


【解决方案1】:

正确的方法 - 分析。这将为您提供基于函数的非常有用的信息 - 代码花费最多的位置,大部分时间调用哪个函数等。编译器级别有可用的分析器(如 gcc 有启用它的选项),或者您可以使用第 3 方的分析器.不幸的是,分析本身会影响程序的性能,并且您可能会看到与启用分析器的实际程序不同的时间,但通常这是一个很好的起点。

至于测量每一行代码的执行时间,那是不切实际的。首先,并非每一行都产生可执行代码,尤其是在优化器之后。另一方面,优化未启用优化编译的代码是毫无用处的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-06
    • 2020-04-12
    • 2017-11-19
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多