Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Как правильнее чиать файл


Автор: iff 18.3.2012, 13:20
Обработка файла производится по символьно.
Например:
Код

Open "file.txt" For Input As #1
Do Until EOF(1)
    X = Input(1, #1)
    '...
Loop
Close #1

Получается файл считывается посимвольно. Будет ли более правильно считывать не каждый символ по одному а некоторую порцию (напрмер 1 Кб), а затем еже ее обрабатывать посимвольно?
Или же это не имеет значени? - Может быть VB считывает порцию в свой буфер, а когда производится чтение по одному байту, он просто достаёт его из буфера, а когда тот заканчивается сново читает порцию.

Автор: Akina 18.3.2012, 13:35
Цитата(iff @  18.3.2012,  14:20 Найти цитируемый пост)
Может быть VB считывает порцию в свой буфер

Да.

Автор: vbCrLf 18.3.2012, 13:38
Я думаю, что для выяснения данного вопроса вам стоит написать и прогнать тесты чтения и обработки двумя способами и банально замерить результаты.
Часто они видны невооруженным взглядом.
Я сам так поступаю, когда у меня в голове есть два разных способа реализации, и мне нужно выяснить, какой из них оптимальнее.

P.S. Когда я сталкивался с похожей ситуацией - быстрее работал код, который читал файл или его фрагмент в массив байтов, и в дальнейшем я работал с этим массивом, чем когда я работал с побайтовым чтением.

Автор: iff 18.3.2012, 13:41
Спасибо за ответы

Автор: Akina 18.3.2012, 22:03
Цитата(vbCrLf @  18.3.2012,  14:38 Найти цитируемый пост)
думаю, что для выяснения данного вопроса вам стоит написать и прогнать тесты 

Чтобы понять, как выполняется чтение, достаточно просто замониторить обращение к файлу через procmon или аналогичную утилиту. Ещё лучше - попробовать на разделах с различающимся размером кластера, а также посмотреть, как выполняется чттение, если берётся один байт из середины большого файла. Очень любопытные получатся результаты...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)