我需要对同一个文件进行一批写操作,但是在文件中的不同位置.我希望以最佳性能实现这一点,因此查看了同步FileStream.Write和异步FileStream.BeginWrite方法.
同步实现很简单,只需在循环中调用FileStream.Write所需的次数即可.异步版本在循环中调用FileStream.BeginWrite,然后执行WaitHandle.WaitAll以阻止它们全部完成.令我惊讶的是,这比简单的同步版本慢.
我已经使用了正确的构造函数,因此我可以要求异步操作创建的FileStream和我还测试这说明假,所以他们没有在一个异步的方式确实操作IAsyncResult.CompletedSynchronous财产.似乎使用BeginWrite的唯一好处是你在写入时不会阻塞你的线程.除了这个好处之外,使用异步版本还有什么意义吗?
这是我用于播放异步方法的测试代码,可能有明显的错误?
// Size of a chunk to be written to file
var chunk = 1024 * 64;
// Number of chunks to write async
var reps = 32;
// Create new file and set length
var fs = new FileStream(@"C:\testfile.dat",
FileMode.Create, FileAccess.ReadWrite,
FileShare.None, chunk, true);
fs.SetLength(chunk * reps);
// Allocate resources
byte[] bytes = new byte[chunk];
WaitHandle[] handles = new WaitHandle[reps];
for (int i = 0; i < reps; i++)
{
fs.Seek(chunk * i, SeekOrigin.Begin);
handles[i] = …Run Code Online (Sandbox Code Playgroud) 我有一个多线程应用程序,它在特定事件上写入同一个文件。我怎样才能锁定文件并使线程等待直到它空闲?我不能使用FileStream因为它会在其他线程上抛出异常(不能访问)
FileStream fileStream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
Run Code Online (Sandbox Code Playgroud)
有没有合适的方法来做到这一点?