2

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

4

5 回答 5

1

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

于 2012-09-07T05:05:07.000 回答
1

您需要一个分析器来查找程序中与性能相关的问题。

根据 Visual Studio 版本,你在 Visual Studio 中具有不同级别的分析支持。如果您有幸使用了 Visual Studio Ultimate 或 Premium 版,那么您将拥有非常好的内置分析支持。

如果您使用的是 Visual Studio Express 或 Visual Studio Professional,遗憾的是,Visual Studio 中没有内置分析支持,但您可以使用此链接上的示例信息,无论如何,如何使用这些版本免费手动进行。

于 2012-09-07T05:17:26.733 回答
0

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

于 2012-09-07T05:05:16.927 回答
0

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

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

对于下一个级别,如果需要,请使用 VTune。

于 2012-09-07T05:35:12.973 回答
0

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

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

与已经可用的分析器相比,它需要做更多的工作,但值得一试。

于 2012-09-07T06:09:55.123 回答