2017-06-19 250 views
0

我有一个使用多线程(大量线程)并需要记录来自每个线程的数据的程序。它输出很多非常小的数据样本,但速度非常快。我的数据兴趣是以连续的方式记录所有样本。缓冲区大小的影响

所以我只需要记录几个更新频率高的数字。 我想将数据附加到单个文件(多个线程到一个文件)。

什么想知道我,如果我使用的StreamWriter EA

const int BufferSize = 65536; // 64 Kilobytes 
StreamWriter sw = new StreamWriter("filename", true, Encoding.UTF8, BufferSize); 

缓冲区大小的请告诉我效果的? 在缓冲区满或直到流写入器刷新到磁盘之前,是否写入数据? (或者通过使用使用结构来刷新(也可以使用语句刷新结束)。至于程序设计,我可以在每个线程中放入流写入器方法,或者在程序启动时创建一个写入器(以便线程只执行附加写入)

对我而言,快速记录非常重要,并且所有数据都应该写入磁盘,因为我可能不会丢失样本,我必须确保它能够全程写入并且不会排队,因为缓冲区尚未满。在直到一些按钮被打了一个连续的方式提供这些数据。(不能将它存储在内存中)

+0

您的要求声明您*不*要缓冲。所以当然缓冲区大小根本不重要。设置AutoFlush = true就是这样。 –

回答

0

您可以设置AutoFlush属性,使其刷新缓冲区的流每次调用后StreamWriter.Write()

如果您要快速连续拨打StreamWriter.Write(),您可以拨打Flush(),而不是强制将缓冲区刷新到文件。

+0

这么多写道会自动刷新然后,谢谢我不知道它有这样一个选项 – user3800527