奇怪的Visual Studio行为:执行时间非常长

时间:2015-02-10 23:21:36

标签: c++ visual-studio visual-studio-2012 visual-studio-2013 execution-time

我注意到一些代码在Visual Studio中执行需要很长时间,而不是使用CL手动编译并运行可执行文件。

以下是展示此行为的代码示例:

int DP[MAX][MAX];
class CartInSupermarketEasy {
public:
int calc(int N, int K) {
    clock_t begin = clock();
    for (int i = 0; i < MAX; ++i) {
        DP[0][i] = 0;
        DP[1][i] = 1;
        DP[i][0] = i;
    }

    for (int n = 1; n <= N; ++n) {
        for (int k = 0; k <= K; ++k) {
            int min_res = N;
            for (int i = 1; i < n; ++i) {
                for (int j = 0; j < k; ++j) {
                    int curr_res = max(DP[n - i][k - 1 - j], DP[i][j]) + 1;
                    min_res = min(curr_res, min_res);
                }
            }
            DP[n][k] = min(min_res, DP[n - 1][k] + 1);
        }
    }
    clock_t end = clock();
    double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
    cout << elapsed_secs << '\n';
    return DP[N][K];
    }
} CI;

int main(){
    cout << CI.calc(100,100) << '\n';
    return 0;
}

在VS2013中运行时,函数calc需要大约13.5秒来计算答案。在VS2012中,这可以降至3.5秒。但是,当使用CL(或我尝试过的任何其他编译器)手动编译时,可执行文件会在.4秒内返回一个答案。

如何解释这种差异,如何使VS执行与手动编译/执行相同?

谢谢。

1 个答案:

答案 0 :(得分:1)

问题是我正在使用&#34; Debug&#34;配置而不是&#34;发布&#34;。将构建配置更改为&#34; Release&#34;解决了这个问题。有趣的是,它的运行速度比现在的手动编译/执行速度快4倍。

更新: 正如评论中指出的那样,由于使用了std :: min和std :: max函数,导致了很多减速。切换到定制的最小/最大功能,加速执行3-4倍。以下是确认此观察结果的文章:std::min causing three times slowdown