C# Streamwriter缺少用于写入数字的异步版本?

C# Streamwriter缺少用于写入数字的异步版本?,c#,stream,async-await,streamwriter,C#,Stream,Async Await,Streamwriter,FileStream缓冲它需要写入的字节。如果缓冲区已满,则会将所有字节写入(刷新)文件。此写入过程可能需要一些时间 由于添加到文件流中的每个字节都可能导致刷新,因此写入函数具有。可以在不等待写入完成的情况下写入流 使将文本写入文件流更加容易。将数据写入StreamWriter会导致将数据写入底层流,从而可能导致刷新 这使得像StreamWriter.Write(int)这样的函数可能会变慢。但是,除了写字符或字符串之外,这些函数没有异步版本。甚至还有一个异步版本的WriteLine 当我编写相

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

由于添加到
文件流
中的每个字节都可能导致
刷新
,因此写入函数具有。可以在不等待写入完成的情况下写入流

使将文本写入
文件流
更加容易。将数据写入
StreamWriter
会导致将数据写入底层流,从而可能导致
刷新

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


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

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


有关更多信息,请查看Stephen Toub和constructor在MSDN上的文章,其中包含
bufferSize
parameter页。

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