FileStream更快的读写大文件的方式



我有一个速度问题和内存效率,我正在从。bin文件中读取大块字节,然后将其写入另一个文件,问题是要读取文件,我需要为它创建一个巨大的字节数组:

Dim data3(endOFfile) As Byte ' end of file is here around 270mb size
Using fs As New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None)
fs.Seek(startOFfile, SeekOrigin.Begin)
fs.Read(data3, 0, endOFfile)
End Using
Using vFs As New FileStream(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "test.bin", FileMode.Create) 'save
vFs.Write(data3, 0, endOFfile)
End Using

需要很长时间来处理,有什么更有效的方法吗?我可以在不使用字节数组的情况下在同一文件流中读写吗?

我从来没有这样做过,但我认为Stream.CopyTo方法应该是最简单的方法,和任何方法一样快。

Using inputStream As New FileStream(...),
outputStream As New FileStream(...)
inputStream.CopyTo(outputStream)
End Using

我不确定重载是否会一次读取所有数据或使用默认缓冲区大小。如果是前者,或者你想指定一个不同于默认值的缓冲区大小,就会有一个重载:

inputStream.CopyTo(outputStream, bufferSize)

您可以尝试不同的缓冲区大小,看看它是否会对性能产生影响。对于内存使用来说,越小越好,但我希望越大越快,至少在某种程度上是这样。

注意CopyTo方法至少需要。net Framework 4.0。如果你在UI线程上执行这段代码,你可能喜欢调用CopyToAsync来代替,以避免冻结UI。同样的两个重载是可用的,加上第三个接受CancellationToken的重载。我不打算在这里教你如何使用Async/Await,所以如果你想这样做,你可以自己研究一下。注意CopyToAsync至少需要。net Framework 4.5。

相关内容

  • 没有找到相关文章

最新更新