【问题标题】:Streamwriter missing async versions to write numbers?Streamwriter 缺少异步版本来写入数字?
【发布时间】:2018-07-03 08:46:36
【问题描述】:

FileStream 缓冲它需要写入的字节。如果缓冲区已满,则将所有字节写入(刷新)到文件中。此写入过程可能需要一些时间。

由于添加到FileStream 的每个字节都可能导致Flush,因此写入函数具有async version。无需等待写入完成即可写入流。

Class StreamWriter 可以更轻松地向FileStream 写入文本。将数据写入StreamWriter 会导致数据写入底层流,因此可能会导致Flush

这使得像StreamWriter.Write(int) 这样的函数可能会变慢。但是,除了写入字符或字符串外,这些函数没有异步版本。 WriteLine 甚至还有一个异步版本。

当我编写整数和双精度等相当小的对象时,是否不需要这些函数?

【问题讨论】:

  • 如果您查看文档,您会发现这些方法中的大多数只是立即转过身来并在传入的值上调用ToString()。很难看出它们提供了其他什么好处比打字少一点(请记住,这种类型可以追溯到 .NET 石器时代,因此当时的想法可能有所不同)。
  • 流使用计时器自动刷新。所以它总是进行刷新(不会导致刷新)。除非你关闭自动冲洗。如果您不希望计时器运行关闭刷新,然后确保在关闭文件之前手动刷新,以便将所有数据写入文件。
  • TextWriter.Write(int) 在 .NET 1.1 中一定看起来是个好主意,但你真的想在 2018 年使用它吗?停止这将解决这个问题和其他一些问题。

标签: c# stream async-await streamwriter


【解决方案1】:

在我看来,它更多地取决于应用程序细节、StreamWriter 实例缓冲区大小、服务器硬件、服务器配置和预期的负载配置文件,而不是正在写入的小数据。您可以创建两个版本的应用程序(一个带有StreamWriter.Write(string),另一个带有StreamWriter.WriteAsync(string)TextWriter.Write(int) 最终会调用它)并测试此实现细节如何影响吞吐量、内存使用等。

有关更多信息,请查看 Stephen Toub 的 Should I expose asynchronous wrappers for synchronous methods? 文章和 MSDN 上带有 bufferSize 参数页面的 StreamWriter() 构造函数。

【讨论】:

    猜你喜欢
    • 2013-06-13
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多