uniform_real_distribution Code Blocks 与 Visual Studio 2019 的性能差异很大

uniform_real_distribution has a huge performance difference between Code Blocks and Visual Studio 2019

我尝试将项目从 Code::Blocks 移植到 Visual C++ 2019。 在那之后,我遇到了一些性能问题。

最明显的性能下降是当我需要生成大量随机双精度变量时。

在网上查了资料,还是无法给出合理的解释。

我在下面简要摘录了部分代码:

#include <iostream>
#include <random>
#include <time.h>

class PublicFunction {
public:
    static double RandomDouble(double, double);
private:
    static std::mt19937 generator_;
};

std::mt19937 PublicFunction::generator_(static_cast<int>(time(0)));

double PublicFunction::RandomDouble(double min_value, double max_value) {
    std::uniform_real_distribution<double> distribution(min_value, max_value);
    return distribution(PublicFunction::generator_);
}

int main() {
    double d;
    double t_start, t_end;
    t_start = clock();
    for (unsigned i = 0; i < 100000000; ++i) {
        d = PublicFunction::RandomDouble(-100, 100);
    }
    t_end = clock();
    std::cout << (t_end - t_start) << std::endl;
    system("PAUSE");
    return 0;

}

在 运行 之后 code::blocks 中的代码使用 C++ 14 和 Visual C++ 2019。

code::blocks 完成执行时间:6155 毫秒,而 Visual C++ 得到 40305 毫秒,几乎慢 7 倍

我想知道为什么会出现这个问题,有什么办法可以解决吗?谢谢

首先感谢@churill 的评论。他的建议很有用。

Debug和Release有很多不同。

影响这个问题的关键因素是Release在编译的时候会优化

更多信息:

medium article