C# 4.5 file read performance sync vs async
在这个问题中,我在接受的答复中看到以下内容:
Most notably,your “async” test does not use async I/O; with file
streams,you have to explicitly open them as asynchronous or else
you’re just doing synchronous operations on a background thread.
在他的异步IO代码中,他正在使用以下内容来异步打开FileStream:
var file = new FileStream(filename,FileMode.Open,FileAccess.Read,FileShare.Read,4096,true)
所以我想知道如果你打算使用诸如CopyToAsync之类的方法,无论你是否打开如上所示的底层FileStream,而不是像下面这样做一些简单的事情:
File.Open(filename,FileMode.Open)
CopyToAsync的实际文档中的示例如何演示打开底层FileStream:
https://msdn.microsoft.com/en-us/library/hh159084(v=vs.110).aspx
如果打开底层FileStream的方式无关紧要,FileStream构造函数的useAsync参数是做什么的?
解决方法
So I was wondering if you intend to use methods such as CopyToAsync whether you should open the underlying FileStream as shown above?
是.原因大多是历史的.
但是,the old Windows 95/98/ME line only supported asynchronous operations on serial port and IOCTL (device driver) handles.该平台线路不支持磁盘文件上的异步I / O.而the original .NET did support 98/ME,所以原来的FileStream只是使用同步I / O.我认为(但不是绝对肯定)Win98 / ME上的APM methods(如FileStream.BeginRead)可能只是使用所谓的“asynchronous delegates”(在线程池线程上执行FileStream.Read的同步方法)来实现.
所以,这是为什么文件流处理默认情况下不使用异步标志打开的历史原因.
Which is how the example in the actual documentation for CopyToAsync demonstrates
不幸的是,很多MSDN的例子都是质量差的.如果您从“以下是一个如何调用此特定方法的示例”的角度来接近他们,则可以使用它们,但从“以下是使用此方法的生产质量代码的示例”的角度来看,并不那么好.