3

我有一个很长的 C++ 程序,由数千行代码、几个类、函数等组成。该程序基本上从输入文件中读取信息,运行算法,并将结果写入输出文件。

今天我意识到程序的运行时间会不时发生巨大变化。所以我做了一个小测试,重新启动我的计算机,关闭所有其他可能的东西,并使用相同的输入文件连续运行代码 5 次。运行时间分别为 50、80、130、180、190 秒。

在这种情况下,我的第一个猜测是未删除的动态记忆。但是我在整个代码中只使用了两次动态数组,我确信我删除了这些数组。

你们对此有什么解释吗?我在 Windows 7 计算机上使用 Visual Studio 2010。

4

2 回答 2

3

请注意在 Visual Studio 调试器中运行程序,因为在这种情况下禁用了 LFH(低碎片堆)内存分配器。从 VS 外部尝试该软件。

我已经看到任务需要几秒钟才能完成的情况,通常只需从 Visual Studio 中运行就需要几个小时才能完成。

最重要的是,如果您仍然不知道分而治之的情况。检测应用程序以查看子系统的运行时间,或者只是将调试计时器放置在各个区域以查看执行时间在哪里发生了巨大变化并从那里向下钻取。如果是内存分配器问题,您通常会在释放数组时看到大量运行时。

于 2013-01-31T03:08:15.847 回答
2

您的代码在一个环境中运行,其中包括操作系统、磁盘、网络、时间、内存、启动的其他进程等的状态。

每次在相同的环境中执行相同的代码都会得到相同的结果。

现在,您会得到不同的结果(执行时间)。如果您重复运行相同的可执行文件,那么周围环境中就会发生一些变化。

现在,最明显的问题是:您的代码是否导致外部环境发生变化?一个简单的例子是:它读入一个文件,更改数据并将其写回同一个文件。

你知道你的代码。只需使用这种方法来隔离您的代码可能对其环境产生的任何影响,您就会找到原因。

于 2013-01-31T03:50:14.570 回答