将 printf 用于 Windows 控制台时,Visual Studio 发布代码比调试代码慢

Visual Studio Release code is slower than Debug code when usaing printf to a Windows console

提问人:skrovno_CZ 提问时间:9/3/2023 最后编辑:Mofiskrovno_CZ 更新时间:9/4/2023 访问量:80

问:

我正在做一个项目来使用 CMD 绘制形状,但我发现了一个奇怪的行为。当我使用调试模式编译代码时,运行的程序较慢,但控制台的输出速度更快(60 FPS)。当我将其编译为 Release 代码时,运行程序的速度提高了大约 10 倍,但输出图像滞后。(约4帧/秒)printf

编译为 Release 时 iostream 库有什么问题吗?在这两种情况下,我的统计数据(在链接的道琼斯波纹管视频中)都显示 60 FPS,但发布代码的外观感觉像是 4 FPS。

我只有带有调试代码的视频。在调试代码中,我的主循环大约是每秒 200 000 个刻度感觉像是 60 FPS而发布代码每秒超过 1 000 000 个刻度,但似乎是 4 FPSprintf

我做了一个帧上限,将其限制在 60 FPS 以避免任何问题。

同样奇怪的是,它在 Windows 10 CMD 中滞后,但在 Windows 11 CMD 中却没有滞后。 (我正在使用 Visual Studio 10 在 Windows 10 机器上使用 Windows 2017 预设编译它)

这真的很令人沮丧,因为获得流畅体验的唯一方法是始终在调试模式下运行程序。(或在 Windows 11 计算机上运行发布版本)

发布代码是否使用与调试代码不同版本的 Wnidows CMD?Visual Studio 中的发布代码是否有任何设置可以修复它?

这是执行 Debug 输出而不是 Release 时的平滑结果。视频

谢谢。

C++ visual-Studio 发布 IOSTREAM

评论

3赞 tkausl 9/3/2023
cmd.exe本来就很慢。尝试在(从 App Store 安装)中运行它,这就是 Windows 11 默认使用的 AFAIK,这就是它运行速度更快的原因。Terminal
1赞 Some programmer dude 9/3/2023
请注意,这是一个旧的 C 函数,它不是 C++ iostreams 库的一部分。为什么你实际上不使用 iostreams 库,而不是?它不会对您的情况产生影响,但至少您可以避免出现许多微妙错误的风险和未定义行为的机会。printfstd::coutprintf
0赞 skrovno_CZ 9/3/2023
@tkausl哦,谢谢你的想法。我会尝试的。
0赞 skrovno_CZ 9/3/2023
@Someprogrammerdude嗯,我之所以使用,是因为我一直在寻找速度差异,大约 80% 的人说这更快。但如果你认为这可能是问题所在,那么我可以尝试改变它。我用来打印图像。printfprintfprintf c_str()
0赞 Minxin Yu - MSFT 9/4/2023
你能分享一个样品进行测试吗?

答: 暂无答案