Взял файл 1.txt размером 364 KB (373 248 bytes)
Компилировал в VS2010 под FW4.0
- Код: Выделить всё
Sub aaa()
Dim Timer As New System.Diagnostics.Stopwatch
Timer.Start()
Dim ArHeader(43) As Byte
Dim ArLarge() As Byte
Dim LSize As Integer
Dim nf As Integer
nf = FreeFile()
LSize = (FileLen("E:\1.txt") - 44) \ 4
ReDim ArLarge(LSize - 1)
FileOpen(nf, "E:\1.txt", OpenMode.Binary)
FileGet(nf, ArHeader, 1)
FileGet(nf, ArLarge, 45)
FileClose(nf)
Timer.Stop()
Console.WriteLine(Timer.ElapsedMilliseconds)
Console.WriteLine(ArHeader(0).ToString)
Console.WriteLine(ArLarge(ArLarge.Length - 1).ToString)
End Sub
Хм, у меня выдает от 6 до 10 мс
- Код: Выделить всё
Sub bbb()
Dim Timer As New System.Diagnostics.Stopwatch
Timer.Start()
Dim ArHeader(43) As Byte
Dim ArLarge() As Byte
Dim LSize As Integer
Dim FS As New System.IO.FileStream("E:\1.txt", IO.FileMode.Open)
Console.WriteLine(FS.Length)
LSize = (FS.Length - 44) \ 4
ReDim ArLarge(LSize - 1)
FS.Read(ArHeader, 0, ArHeader.Length)
FS.Read(ArLarge, 0, ArLarge.Length)
FS.Close()
Timer.Stop()
Console.WriteLine(Timer.ElapsedMilliseconds)
Console.WriteLine(ArHeader(0).ToString)
Console.WriteLine(ArLarge(ArLarge.Length - 1).ToString)
End Sub
Вариант с потоком работает чуть быстрее от 2 до 6 мс
Работать с файловым потоком напрямую - предпочтительнее... Т.к. FIleGet, FileOpen и т.д. в .NET находятся в пространстве имён Microsoft.VisualBasic для совместимости с VB6, и могут работать медленнее
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる