Медленно читается файл в массив.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Медленно читается файл в массив.

Сообщение Mikle » 27.03.2011 (Вс) 8:24

Такой код:
Код: Выделить всё
    Dim ArHeader(43) As Byte
    nf = FreeFile()
    LSize = (FileLen("..\large.wav") - 44) \ 4
    ReDim ArLarge(LSize - 1)
    FileOpen(nf, "..\large.wav", OpenMode.Binary)
    FileGet(nf, ArHeader, 1)
    FileGet(nf, ArLarge, 45)
    FileClose(nf)

Просто читаю WAV-файл в два массива - заголовок и данные. На vb6 это срабатывает мгновенно, а на vb2008 тормозит на чтении ArLarge, 300 кБ читается 3-4 секунды, ощущение, что читается побайтно, повторное чтение не ускоряется, то есть дело не в кешировании.
Что я делаю неправильно?
Сорри за нубский вопрос :).

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Медленно читается файл в массив.

Сообщение FireFenix » 27.03.2011 (Вс) 12:57

Взял файл 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, и могут работать медленнее
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Медленно читается файл в массив.

Сообщение Mikle » 27.03.2011 (Вс) 14:27

Потоки попробую, но всё равно странно, почему у меня в 500 раз медленнее. vs2008, fw2.0

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Медленно читается файл в массив.

Сообщение FireFenix » 27.03.2011 (Вс) 23:32

Mikle писал(а):Потоки попробую, но всё равно странно, почему у меня в 500 раз медленнее. vs2008, fw2.0

Вообще FW2.0 морально устаревший и многое не поддерживает... а FW3.5 начиная вроде с WinXP SP1 идёт стандртом
Попробуй скомпилировать под другие версии, может эта проблема в ранних версиях FW
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Медленно читается файл в массив.

Сообщение iGrok » 28.03.2011 (Пн) 14:54

FireFenix писал(а):а FW3.5 начиная вроде с WinXP SP1 идёт стандртом

Ого. Вот почему дотнетчики так в своей силе уверены оказывется..
Даже в XP SP2 "стандартом" фреймворка ВООБЩЕ НЕТ.

3.5 "вшит" в семёрку. 3.0 - в Vista. 1.1 - в 2003 Server.
Вроде бы что-то там вшито в XP sp3 и кажись в каком-то из SP для Vista повышенный FW стоит, но и всё.
label:
cli
jmp label

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Медленно читается файл в массив.

Сообщение FireFenix » 28.03.2011 (Пн) 20:24

iGrok писал(а):
FireFenix писал(а):а FW3.5 начиная вроде с WinXP SP1 идёт стандртом

Ого. Вот почему дотнетчики так в своей силе уверены оказывется..
Даже в XP SP2 "стандартом" фреймворка ВООБЩЕ НЕТ.

3.5 "вшит" в семёрку. 3.0 - в Vista. 1.1 - в 2003 Server.
Вроде бы что-то там вшито в XP sp3 и кажись в каком-то из SP для Vista повышенный FW стоит, но и всё.

Главное слово "Вроде" 8)

Последний раз, когда я ставил WinXP SP2, скачанную с трекера, на котором писали, что это оригинальный образ... то на ней дефолтно стояло FW3.5
с WinXP SP3 - та же история...

возможно я преувеличил... Но у большинства юзеров стоит FW не меньше 3.5 :)
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Медленно читается файл в массив.

Сообщение VVitafresh » 29.03.2011 (Вт) 10:12

FireFenix писал(а):Последний раз, когда я ставил WinXP SP2, скачанную с трекера, на котором писали, что это оригинальный образ... то на ней дефолтно стояло FW3.5

Значит, брешут гады. В оригинальной WinXP SP2 второго фреймворка точно нет (FW3.5 и подавно).
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 24

    TopList