相关疑难解决方法(0)

FileStream.BeginWrite优于FileStream.Write?

我需要对同一个文件进行一批写操作,但是在文件中的不同位置.我希望以最佳性能实现这一点,因此查看了同步FileStream.Write和异步FileStream.BeginWrite方法.

同步实现很简单,只需在循环中调用FileStream.Write所需的次数即可.异步版本在循环中调用FileStream.BeginWrite,然后执行WaitHandle.WaitAll以阻止它们全部完成.令我惊讶的是,这比简单的同步版本慢.

我已经使用了正确的构造函数,因此我可以要求异步操作创建的FileStream和我还测试这说明假,所以他们没有在一个异步的方式确实操作IAsyncResult.CompletedSynchronous财产.似乎使用Be​​ginWrite的唯一好处是你在写入时不会阻塞你的线程.除了这个好处之外,使用异步版本还有什么意义吗?

这是我用于播放异步方法的测试代码,可能有明显的错误?

        // 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)

.net c# asynchronous filestream

6
推荐指数
1
解决办法
5585
查看次数

c# 多线程写入同一个文件

我有一个多线程应用程序,它在特定事件上写入同一个文件。我怎样才能锁定文件并使线程等待直到它空闲?我不能使用FileStream因为它会在其他线程上抛出异常(不能访问)

FileStream fileStream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
Run Code Online (Sandbox Code Playgroud)

有没有合适的方法来做到这一点?

c#

6
推荐指数
1
解决办法
7100
查看次数

标签 统计

c# ×2

.net ×1

asynchronous ×1

filestream ×1