2013-04-21 165 views
2

我有一个Qt C++程序,它可以在循环中处理一些数据。C++多次将文本写入文件

它将每个数据处理结果附加到文本文件的末尾。数据处理操作被放置在一个循环中,因此程序可以在几秒钟内生成更多的800个结果,并逐个写入(即单独)。

我认为这么多的I/O操作对计算机的硬盘来说并不是很好,所以我组织了一个数组来存储数据处理结果,当数组长度超过200时,程序会将它附加到文件和干净,比阵列再次变得更多,等等。

但我不知道 - 是否真的需要?也许这只是浪费内存,我应该追加数据到文本文件没有这些数组(缓冲区)?毕竟,程序独立地以相同的数据写入相同数量的数据。

+3

这是矫枉过正。您可以期望您的操作系统自动执行您正在尝试执行的操作。 – 2013-04-21 03:01:59

+1

别担心,你的硬盘会有一个[磁盘缓冲区](http://en.wikipedia.org/wiki/Disk_buffer),这是一个内存缓存系统,它可以确保这个缓存在第磁盘写入。例如一个8kb的缓存,将等待8kb的数据填满,然后将它作为一个8kb的数据块写入驱动器 – 2013-04-21 03:06:49

+1

如果你正在打开无缓冲的系统调用,我会说这不是不明智的,但我非常怀疑你在IO层很深,所以你正在做的事情可能完全是矫枉过正。 – WhozCraig 2013-04-21 03:07:57

回答

1

一般来说,由于C++机制提供了缓冲io,因此您可以随意更改它。在你的情况下,你提到的“800结果”并不能告诉你输出数据的确切大小。所以你可能会过度技能。 F.Y.I,函数ios :: rdbuf()将获得一个指向流表示流的内部缓冲区的streambuf对象的指针。然后你可以调用streambuf :: pubsetbuf(char * s,streamsize n)来设置一个给定大小的新内部缓冲区。您还可以从http://en.cppreference.com/w/cpp/io/basic_ios/rdbuf找到详细信息。