powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка "I/O error 103" при выполнении CloseFile из-под службы
14 сообщений из 39, страница 2 из 2
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032521
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m52
Вот и я тоже хотел спросить, чем можно заменить последовательное по-строчное чтение из большого текстового файла?
Сразу скажу, что TStringList.LoadFromFile не предлагать, т.к. есть риск сожрать всю память и получить "Out of Memory". Надо именно последовательно считывать текст, по-строчно!

TStreamReader, хотя и у него есть нюансы, в основном связанные с еще пишущимся файлом.
На самом деле, в этих легаси функциях нет никакой магии, они юзают те же самые API-шные файловые функции, что и SysUtils.File*. Разве что алгоритм построчного чтения в виде функциональной обертки больше нигде не реализован, но его можно и выдрать из исходников и приспособить к SysUtils.File*. Тем более что там не бог весть какая rocket science
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032544
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
TStreamReader

О! Как-то мимо меня прошло, хотя появилось в D2009 :) Спасибо.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032551
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, да он почти в два раза медленнее работает, чем старые функции... Проверял на XE2, если что.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032577
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey
Блин, да он почти в два раза медленнее работает, чем старые функции... Проверял на XE2, если что.

Да, в ридере неоптимальный код с лишними копированиями, что особенно влияет в случае utf16 файла, который можно бы гнать в строку 1:1. Но на 150-Мб utf8 файле у меня получились результаты "ср.время: 3130 / 2329", что не столь драматично. Возможно, в 10-ке еще улучшили (проверял тоже в ХЕ2).
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032583
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
А какой ещё механизм для последовательного чтения текстовых файлов предлагает Delphi?

Я бы заметил, что адекватные разработчики уже под MS-DOS этим механизмом не пользовались. С версии, если мне не изменяет память, 5.5, когда были добавлены BlockRead/BlockWrite.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032584
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

А ты при проверке одинаковый размер буфера им указал? В десятке, кстати, буфер также локально выделяется.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032586
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Я бы заметил, что адекватные разработчики отличают чтение текстовых данные от бинарных.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032587
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

я бы заметил, что адекватные разработчики даже знают, чем они отличаются.

Ничем.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032588
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey
А ты при проверке одинаковый размер буфера им указал? В десятке, кстати, буфер также локально выделяется.

Тут ты прав, только что вспомнил про буферы и выставил всем по 8 кб. Результат плачевный для класса: ср.время: 4414 / 1284 / 47 (третья цифра - чистое чтение в буфер через SysUtils.File* функции).
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032591
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
я бы заметил, что адекватные разработчики даже знают, чем они отличаются.

Именно.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032595
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В 10.3 не особо что-то поменялось. Буфер читается из файла (причем выделяется динамически каждый раз), потом FEncoding.GetString, который через GetCharCount вызывает функцию конвертации без записи, выделяет память под строку и перегоняет в кодировку назначения, а потом эта строчка пихается в TStringBuilder (снова копирование + расширение при необходимости). А извлечение делается так - поиск в TStringBuilder с обращением через GetChars к каждому символу (а это геттер с вложенным вызовом и проверками), потом получение строки (копирование), SetLength ее же (realloc) и удаление прочитанного FBufferedData.Remove (копирование)
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032620
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

Оптимизация никогда не была сильной стороной дельфей, увы. А когда они заменили большинство кодеров на индусов на аутсорсе, то всё стало ещё хуже.

Я вообще предпочитаю со строками через свои велосипеды работать.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40032626
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
А когда они заменили большинство кодеров на индусов на аутсорсе, то всё стало ещё хуже.

Я тут заглянул в TWriter.WriteVar(const Buffer: TExtended80Rec; Count: NativeInt); аж глаз задёргалсо.
...
Рейтинг: 0 / 0
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
    #40084420
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Я тут заглянул в TWriter.WriteVar(const Buffer: TExtended80Rec; Count: NativeInt); аж глаз задёргалсо.
Я честно говоря вообще не вижу осмысленного применения TWriter.WriteVar. Лучше пользоваться специализированными методами для записи различных типов.
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка "I/O error 103" при выполнении CloseFile из-под службы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]