我应该在内存流上使用异步I/O吗?

Fre*_*els 1 c# asynchronous

如果我知道我正在操作的流是MemoryStream,那么不使用任何异步方法(CopyToAsync,ReadAsync等等)会更好吗?

Stephen Clearly对这个SO问题的评论使我怀疑我在服务器应用程序中使用的方法应该能够处理许多并发请求.

在该应用程序中,所有I/O都是异步完成的,因此不会浪费任何线程.但是,由于似乎CopyToAsync fi在MemoryStream上并不是真正的异步,我想知道我是否在服务器应用程序中有任何好处 - 在MemoryStream上使用异步操作.

arb*_*ter 6

好吧,如果你检查MemoryStream实现,你会发现ReadAsync(和WriteAsync)实际上是同步而不使用任何额外的线程.虽然有一些开销,但它很小,应该可以忽略不计.

CopyToAsync是一个不同的野兽.虽然其他异步方法仅适用于一个线程,但CopyToAsync可以使用两个.虽然您的源MemoryStream不会从异步中受益,但目标线程可以.当然,如果两个流都是内存流,那么你将无法获得任何好处.

因此,回答一般问题,MemoryStream只有异步方法才能与其他流实现保持一致.但是在使用它时,不会出现任何明显的性能下降.

PS如果您需要良好的性能MemoryStream,最好避免重新分配,重用底层缓冲区等.但它与async无关的主题不同.