为什么使用Filestream来复制文件会快速移动,然后在完成之前有很长的延迟?

时间:2019-06-11 16:52:18

标签: vb.net file filestream

我正在使用一对io.filestreams复制一个文件,因此我可以在复制文件时监视其进度。但是,与系统副本相比,复制率似乎很奇怪。该文件正在从本地计算机复制到远程计算机(具有UNC路径),无论计算机是什么,该文件看起来都是一致的。

作为参考,如果通过拖放文件来复制文件,则大约需要13秒钟,并且Windows文件复制进度条会对此进行相应反映。

如果我使用代码复制文件,则“进度条”显示所有字节均在一秒内被复制,那么在关闭读取数据流的过程中大约会有12秒的延迟。

我尝试在编写过程中刷新流,但这似乎没有任何影响。为什么字节显示的写入速度如此之快,然后在代码使用循环退出文件流时发生延迟?

这是我使用的方法:

Public Sub CopyFileInByteChunks(SourcePathFile As String, DestinationPathFile As String, NumberOf1KByteChunks As Long)

    Dim CopyBufferSize As Long = 1024 * 1024

    Console.WriteLine("START")
    Using sr = New IO.FileStream(SourcePathFile, IO.FileMode.Open, FileAccess.Read)
        Using sw = New IO.FileStream(DestinationPathFile, IO.FileMode.Create)
            Dim ThisFileBytesSoFar As Long = 0
            sw.SetLength(sr.Length) 'Ensures that the write out will be in contiguous bytes on the device (disk)
            Dim byteData(CopyBufferSize) As Byte
            Dim bytesRead As Long
            Do
                bytesRead = sr.Read(byteData, 0, CopyBufferSize) 'read 1 buffer worth of data
                ThisFileBytesSoFar += bytesRead 'for prog bar
                sw.Write(byteData, 0, bytesRead)
                Console.WriteLine(ThisFileBytesSoFar)
                If bytesRead = 0 Then
                    Exit Do
                End If
            Loop
            Console.WriteLine("Completed Copy Loop")
        End Using
        Console.WriteLine("Exited Writer Using")
    End Using
    Console.WriteLine("Exited Reader Using")
End Sub

0 个答案:

没有答案