【发布时间】:2021-03-21 05:06:57
【问题描述】:
我尝试将项目从 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;
}
在使用 C++ 14 和 Visual C++ 2019 的 code::blocks 中运行代码后。
code::blocks 的执行时间为 6155 毫秒,而 Visual C++ 为 40305 毫秒,几乎慢了 7 倍。
我想知道为什么会出现这个问题,有什么办法可以解决吗?谢谢。
【问题讨论】:
-
您是否忘记切换到发布?当我将其复制粘贴到 VS 2019 并作为发布版本运行时,我得到 3122 :)
-
@churill 哦,你是对的,这对我的问题有效。我真的很感激。但是调试和发布有什么区别呢?在我发布这个问题之前,我曾尝试在调试方向执行 .exe 文件,但它仍然存在相同的性能问题。我想我需要为此学习。最后,再次感谢您的回答。
-
发布版本以各种方式进行了优化。例如,只要可观察的行为没有改变,编译器可能会内联短函数、消除临时变量、重新排序函数调用等。显然,当编译器完全改变代码时,很难在代码中找到错误,这就是调试构建的目的。它慢了好几倍,但包含调试它的所有信息;)
-
好的,知道了。你真好。祝你未来一切顺利。 :)
标签: c++ visual-studio visual-c++ c++14 codeblocks