我有一个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采取的时间或不是可忽略不计的事情?或者我认为这取决于?
答案 0 :(得分:4)
首先,从您的伪代码中,您可以在文件输出后启动计时器:-)但我猜它在真实的应用程序中并不像那样。
除此之外,这显然是“依赖于”的问题。如果你没有那么多输出,并且你感兴趣的代码运行了几分钟,那么输出显然不会产生很大的差别。另一方面,如果您试图捕获以微秒为单位测量的运行时间,那么您可能主要测量的是流量。
您可以尝试执行各种魔法,例如在线程上运行实际输出,或者只是将消息添加到先前分配的char数组并在最后输出。但是,一切都会导致运行时损失;没有什么是免费的。
由于您对测量实际输出时间不感兴趣,因此您可以编译没有输出的版本进行测量,并使用输出版本来调试代码。编辑:或使其成为运行时选项。没有什么是免费的,但是“if(OutputEnabled)”非常接近“免费”: - )
答案 1 :(得分:2)
它主要取决于ofstream
的作用...只要它只是将数据存储在其内部缓冲区中它就会很快,但如果得到它的缓冲区填充并实际调用OS API来执行写入花的时间可能要大得多。
但显然一切都取决于“实验工作”与您执行的IO相比需要多长时间,无论是在将数据写入内部缓冲区还是刷新流的情况下;正如评论中所建议的那样,你应该独立地计算这两件事,看看一次是如何比较另一件事的。
答案 2 :(得分:1)
与其他东西相比,某些东西可以忽略不计。你在问题中没有别的。
我在这里已经提出了一个问题,以便检查下面我的陈述的有效性,结论是我不应该保留这样的分类,尽管它仍然只是给出了粗略的草案评估 (在某些情况下可能是假的):
堆栈操作比堆内存创建快10倍,比图形设备操作快10倍,比I / O操作(例如写入硬盘驱动器上的文件)快10倍,比网络通信速度快10倍操作... 的
这只是一个粗略的估计。每次编码时都必须重新评估所有内容。
如果写入到流的时间过去不影响整个机制,则可以认为它可以忽略不计。
如果它确实影响了整个程序机制,那么它就不能被认为是微不足道的。明显。