【问题标题】:effect of BufferSizeBufferSize 的影响
【发布时间】:2017-11-21 06:10:20
【问题描述】:

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

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

如果我使用 streamwriter ea 有什么好奇怪的

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

Buffersize的作用是什么? 在缓冲区已满或流写入器刷新到磁盘之前不会写入数据吗? (或通过使用 using 构造进行刷新(也以 using 语句结束刷新)。至于程序设计,我可以将流编写器方法放在每个线程中,或者在程序启动时创建单个编写器(以便线程只执行附加写入)。

对我来说,快速记录很重要,并且所有内容都应该写入磁盘,因为我可能不会丢失样本。我必须确保它一直被写入并且没有排队,因为缓冲区还没有满。我还需要以连续的方式提供这些数据,直到按下某个按钮。 (无法存储在内存中)

【问题讨论】:

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

标签: c# buffer streamwriter


【解决方案1】:

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

如果您要快速连续调用几次StreamWriter.Write(),则可以调用Flush() 来强制它将缓冲区刷新到文件中。

【讨论】:

  • 这么多连续写入会自动刷新,谢谢我不知道它有这样的选项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多