【问题标题】:how to find out what part of my code is slowing my c++ program如何找出我的代码的哪一部分减慢了我的 C++ 程序
【发布时间】:2012-08-31 23:26:02
【问题描述】:

我编写了我的程序的 2 个版本,这是 C++ 中的进化算法。第一个版本是程序化的,运行良好且速度非常快。第二个版本完全是面向对象的,程序找到结果,但是非常非常慢(比第一个版本慢 10 倍)。有没有办法测量循环内代码段的时间或类似的东西?任何建议或想法都会有所帮助。 提前致谢。

【问题讨论】:

  • 您使用的是哪个编译器/平台? Windows 上的 Visual Studio? Linux 上的 gcc?
  • 这可能会有所帮助。如何在c中测量时间? stackoverflow.com/questions/3557221/how-do-i-measure-time-in-c
  • 使用分析器是显而易见的答案,但我猜我会说你可能是在复制对象而不是通过引用或智能指针传递
  • 在 C++ 中很容易犯这样的简单错误,在不经意间复制大量数据。在 C 语言中,您必须竭尽全力使用 memcpy 结构。只需一次失误,您就可能一遍又一遍地丢下无数兆字节的数据副本。

标签: c++ windows performance algorithm visual-studio-2012


【解决方案1】:

您可以在 VS 中使用 \callcap 编译器标志。你可以阅读它here

基本上,您可以仅为要分析的.cpp 文件添加此标志,定义进入/退出函数,重新构建应用程序并运行它。我建议你把你正在尝试分析(并且怀疑速度很慢)的代码拆分成函数,然后你可以看到哪一段代码需要更多的时间来执行。

与现有的分析器相比,它的工作量更大,但值得一试。

【讨论】:

    【解决方案2】:

    对于您的特殊情况,我建议下载并使用此工具:http://www.codersnotes.com/sleepy/

    这是一个非常简单(但高效)的采样分析器。 只需在 Visual Studio 中使用 Ctrl+F5(发布)启动您的应用程序,运行此程序(非常困),双击您的 exe 名称,等待,您将看到包含函数名称的详细报告。

    如果需要,请使用 VTune。

    【讨论】:

      【解决方案3】:

      您需要profiler 来查找程序中与性能相关的问题。

      Depending on the Visual Studio edition, you have various levels of profiling support in your Visual Studio.如果你有幸使用 Visual Studio Ultimate 或 Premium 版,you have very good profiling support built right in.

      如果您使用的是 Visual Studio Express 或 Visual Studio Professional,遗憾的是,Visual Studio 中没有内置分析支持,但您可以使用例如 info at this link 如何在这些版本中免费手动执行此操作。

      【讨论】:

        【解决方案4】:

        使用分析器。例如,如果您使用 gcc 进行编译,请查找 gprof。

        【讨论】:

          【解决方案5】:

          使用分析器。哪个最好取决于平台/运行环境;例如使用 g++,你可以使用 gprof,或者如果你不想重新编译,你可以使用 oprofile,假设是 Linux。在 Solaris 上,您可以使用 dtrace。在其他平台(例如 Windows 或 Mac)上,将您平台的标签添加到问题中...

          【讨论】:

          • 我尝试在 Visual Studio 中使用分析器,但无法获得具体结果,只有图表
          猜你喜欢
          • 2010-10-03
          • 2010-12-22
          • 2020-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-31
          • 1970-01-01
          • 2013-10-27
          相关资源
          最近更新 更多