我有一个 C++ 程序,我在其中进行各种实验,在这些实验中,我使用ofstream
. 结构基本上是:
Start timer
output to a file using ofstream (the output is, at most, a few words)
do some experimental work
Stop timer
我的问题有点宽泛,我可以忽略 ofstream 所花费的时间还是可以忽略不计?或者我想这取决于?
首先,从您的伪代码中,您可以在文件输出后启动计时器 :-) 但我猜在真正的应用程序中它不是那样的。
除此之外,这显然是一个“取决于”的问题。如果您没有输出那么多,并且您感兴趣的代码运行了几分钟,那么输出显然不会有太大的不同。另一方面,如果您试图捕捉以微秒为单位测量的运行时间,那么您可能主要测量的是 ofstream。
您可以尝试做各种魔术,例如在线程上运行实际输出,或者只是将您的消息添加到先前分配的 char 数组并在最后输出。但是,一切都会导致一些运行时损失;没有什么是免费的。
由于您对测量实际输出时间不感兴趣,您可以编译一个没有输出的版本来进行测量,并编译一个带有输出的版本来调试代码。编辑:或将其设为运行时选项。没有什么是免费的,但是“如果(OutputEnabled)”非常接近“免费”:-)
它主要取决于做什么ofstream
......只要它只是将数据存储在其内部缓冲区中就会很快,但如果它的缓冲区被填满并实际调用 OS API 来执行写入,那么花费的时间可能会大得多。
但显然一切都取决于“实验工作”与您执行的 IO 相比需要多长时间,无论是在它只是将数据写入内部缓冲区的情况下,还是在刷新流的情况下;正如评论中所建议的那样,您应该独立地为这两件事计时,看看一个时间与另一个时间相比如何。
与其他事物相比,某些事物可以忽略不计。在您的问题中,您无法与其他任何东西进行比较。
我已经在这里问了一个问题,以检查我在下面的陈述的有效性,结论是我不应该保留这样的分类,尽管它仍然只是给出了一个粗略的粗略评估(在某些情况下可能是错误的):
堆栈操作比堆内存创建快 10 倍,堆内存创建比图形设备操作快 10 倍,比 I/O 操作(例如写入硬盘驱动器上的文件)快 10 倍,比网络通信操作快 10 倍......
这只是一个粗略的估计。每次编码时都必须重新评估所有内容。
如果写入 ofstream 的时间不会影响整个机制,那么它可以被认为可以忽略不计。
如果它确实影响了你的整个程序机制,那么它就不能被认为是微不足道的。明显地。