Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
m52 Вот и я тоже хотел спросить, чем можно заменить последовательное по-строчное чтение из большого текстового файла? Сразу скажу, что TStringList.LoadFromFile не предлагать, т.к. есть риск сожрать всю память и получить "Out of Memory". Надо именно последовательно считывать текст, по-строчно! TStreamReader, хотя и у него есть нюансы, в основном связанные с еще пишущимся файлом. На самом деле, в этих легаси функциях нет никакой магии, они юзают те же самые API-шные файловые функции, что и SysUtils.File*. Разве что алгоритм построчного чтения в виде функциональной обертки больше нигде не реализован, но его можно и выдрать из исходников и приспособить к SysUtils.File*. Тем более что там не бог весть какая rocket science ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 10:26 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal TStreamReader О! Как-то мимо меня прошло, хотя появилось в D2009 :) Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 11:25 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
Блин, да он почти в два раза медленнее работает, чем старые функции... Проверял на XE2, если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 11:38 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Блин, да он почти в два раза медленнее работает, чем старые функции... Проверял на XE2, если что. Да, в ридере неоптимальный код с лишними копированиями, что особенно влияет в случае utf16 файла, который можно бы гнать в строку 1:1. Но на 150-Мб utf8 файле у меня получились результаты "ср.время: 3130 / 2329", что не столь драматично. Возможно, в 10-ке еще улучшили (проверял тоже в ХЕ2). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 12:38 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey А какой ещё механизм для последовательного чтения текстовых файлов предлагает Delphi? Я бы заметил, что адекватные разработчики уже под MS-DOS этим механизмом не пользовались. С версии, если мне не изменяет память, 5.5, когда были добавлены BlockRead/BlockWrite. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 12:49 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, А ты при проверке одинаковый размер буфера им указал? В десятке, кстати, буфер также локально выделяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 12:55 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
softwarer, Я бы заметил, что адекватные разработчики отличают чтение текстовых данные от бинарных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 12:59 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, я бы заметил, что адекватные разработчики даже знают, чем они отличаются. Ничем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 13:02 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey А ты при проверке одинаковый размер буфера им указал? В десятке, кстати, буфер также локально выделяется. Тут ты прав, только что вспомнил про буферы и выставил всем по 8 кб. Результат плачевный для класса: ср.время: 4414 / 1284 / 47 (третья цифра - чистое чтение в буфер через SysUtils.File* функции). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 13:03 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
softwarer я бы заметил, что адекватные разработчики даже знают, чем они отличаются. Именно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 13:08 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
В 10.3 не особо что-то поменялось. Буфер читается из файла (причем выделяется динамически каждый раз), потом FEncoding.GetString, который через GetCharCount вызывает функцию конвертации без записи, выделяет память под строку и перегоняет в кодировку назначения, а потом эта строчка пихается в TStringBuilder (снова копирование + расширение при необходимости). А извлечение делается так - поиск в TStringBuilder с обращением через GetChars к каждому символу (а это геттер с вложенным вызовом и проверками), потом получение строки (копирование), SetLength ее же (realloc) и удаление прочитанного FBufferedData.Remove (копирование) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 13:21 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, Оптимизация никогда не была сильной стороной дельфей, увы. А когда они заменили большинство кодеров на индусов на аутсорсе, то всё стало ещё хуже. Я вообще предпочитаю со строками через свои велосипеды работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 14:17 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
alekcvp А когда они заменили большинство кодеров на индусов на аутсорсе, то всё стало ещё хуже. Я тут заглянул в TWriter.WriteVar(const Buffer: TExtended80Rec; Count: NativeInt); аж глаз задёргалсо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2020, 14:32 |
|
||
|
Ошибка "I/O error 103" при выполнении CloseFile из-под службы
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Я тут заглянул в TWriter.WriteVar(const Buffer: TExtended80Rec; Count: NativeInt); аж глаз задёргалсо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2021, 02:11 |
|
||
|
|

start [/forum/topic.php?fid=58&gotonew=1&tid=2037178]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 196ms |

| 0 / 0 |
