为何相同C++代码在VSCode中运行性能优于命令行?
终端输出性能差异问题排查与解决
我使用g++ 12.2.0(通过MSYS2安装的MinGW-w64)编译运行代码时,发现相同代码在VSCode(搭配Code Runner扩展)和命令行环境下性能表现差异显著,两者使用的编译运行命令均为g++ f1.cpp -o f1 && f1,且PowerShell、VSCode内置终端都存在这个现象。
示例代码
#include <iostream> #include <chrono> #include <string.h> using std::chrono::high_resolution_clock, std::chrono::duration_cast, std::chrono::nanoseconds; void timeit(void (*func)(std::string), std::string message){ auto time_start = high_resolution_clock::now(); func(message); auto time_end = high_resolution_clock::now(); auto duration = duration_cast<nanoseconds>(time_end - time_start).count(); std::cout << "Execution Time: " << duration * 1e-6f << " [ms]" << std::endl; } void run(std::string message){ std::cout << message.c_str() << std::endl; } int main() { for (size_t i = 0; i < 100; i++) timeit(&run, std::to_string(i)); }
输出对比
VSCode(Code Runner)输出
...
96
Execution Time: 0.0025 [ms]
97
Execution Time: 0.0022 [ms]
98
Execution Time: 0.0034 [ms]
99
Execution Time: 0.0029 [ms]
命令行输出
...
96
Execution Time: 0.5091 [ms]
97
Execution Time: 0.5168 [ms]
98
Execution Time: 2.4943 [ms]
99
Execution Time: 0.7385 [ms]
排查与解决
一开始尝试开启编译优化、将迭代次数提升至1e6,问题依然存在。后来发现问题根源是终端性能限制:
- 将代码中的
std::endl替换为\n后,两种环境下的性能都大幅提升,差异消失; - 改用计算密集型操作而非输出操作时,两种环境的性能表现一致。
内容的提问来源于stack exchange,提问作者M. Kasuro
相关产品推荐
相关产品推荐

