STD :: COUT正在减少CPU使用情况
std::cout is decreasing CPU Usage?
我正在运行用C 编写的程序,其中CPU使用是一个重要的因素,并且一直在努力减少它,直到遇到意外的异常。该程序使用std::cout
行来查看性能,当我将其删除时,该程序在Windows Resource Monitor中急剧上的CPU用法在4-6秒的间隔中大约1秒钟。
使用std::cout
行,它在0-2%的CPU使用情况下平稳运行,而无需任何峰值。删除std::cout
行,它以0-2%的CPU使用,在Windows Resource Monitor中的4-6秒间隔CPU使用率高达25%。
有趣的是,增加了输出的字符串大小可降低CPU尖峰的高度,并降低字符串的大小增加了CPU Spike的高度。
这是所讨论的代码行:
float engineCompletionTime = engineTimer->getEngineCompletionTime();
/* Stops CPU from spiking */
std::cout << "Engine cycle took " << engineCompletionTime << " milliseconds." << std::endl;
if (engineCompletionTime < 14.0f) {
std::this_thread::sleep_for(std::chrono::milliseconds((int)(14.0f - engineCompletionTime)));
}
编辑:谢谢您的最初答复,但要清楚:
当std :: cout系列在程序中时,没有CPU Spike。
当std :: Cout线不在程序中时,有一个CPU Spike。
随着std :: cout打印的字符串大小增加,CPU尖峰的大小减小。
取决于实现,写信给std::cout
基本上涉及将控制转移到操作系统短时间内,然后将数据发送到终端。这不是Windows上最快的过程,在此期间,程序基本上是空闲的。std::cout
必须处理的数据越多,延迟所需的时间越长,因此该程序花费的时间越多。
如果程序花费大量时间在等待输入(来自键盘或鼠标的另一个程序,请从" redraw the Scrient"信号中,如果它具有GUI,则来自操作系统,请使用较低的CPU。,或从文件系统中(。基本上,CPU使用代表程序不是等待的时间的部分。
如果该程序的唯一工作是处理大量传入数据,而没有延迟,那么它根本不应该等待,如果使用较高的CPU使用情况,那很好。另一方面,如果您的程序是等待用户输入(例如互动的应用程序(,则使用较高的CPU使用可能会出现问题,因为这意味着该程序正在执行很多操作工作,即使用户不做任何事情。
使程序提高效率通常会解决此问题。
高CPU使用的其他原因
如果您要检查是否在紧密的循环中发生某些事情,而不是使用事件处理,这将导致高CPU使用情况,因为即使程序正在等待某些东西,它还是会积极检查。每三分钟检查门的门与门铃的权利之间,这是一个区别。如果您每三分钟检查一次,即使您只是在等待,也会做很多工作。但是,如果您只等到门铃戒指(与事件处理一样(,那么您实际上并没有做任何工作。
std :: cout的性能并不是很高的表现(尤其是在win32!(,并且强迫用std :: endl进行冲洗不会有帮助的事情:)通常最好自行跟踪这些日志消息,要么:完成后写入文件,打印一个平均每次n左右的代表,或在末尾打印简化的摘要。
- 在没有太多条件句的情况下,我如何避免被零除
- STD :: COUT正在减少CPU使用情况
- Qnetworkreply,QnetworkAccessManager- https下载文件 - 高CPU使用情况
- OSX上的Gldrawelements具有很高的CPU使用情况
- 在QML中旋转图像时降低CPU使用情况
- 如何在Windows中查找特定进程在该时刻的CPU使用情况
- 查找快速进程的CPU使用情况
- 在我的程序中分析 CPU 使用情况的最佳选择
- glFinish()过程中的CPU使用情况
- 在CPU中花费的时间比实际情况更快
- 在c++/windows中获取特定进程的当前cpu使用情况
- 测量C++和Java进程的CPU使用情况
- 使用“超线程”正确测量CPU使用情况
- C++-以赫兹(Windows)为单位查找当前CPU使用情况
- 使用c++获取Linux中进程的RAM和CPU使用情况
- 在内存不增加的情况下逐渐提高cpu使用率.的想法
- 访问CPU/RAM使用情况(类似于任务管理器,但通过API!)
- VMWare ESX/ESXi CPU使用情况
- 如果已知访问顺序是安全的,如何在没有互斥锁的情况下同步线程/CPU
- 测量新/旧代码在特定功能上的CPU使用情况