![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
TarasBer |
![]()
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Мне очень не нравится скорость побайтового чтения - 3МБ файл читается больше секунды, когда дельфовый аналог на BlockRead считывает его моментально.
Всё, что приходит в голову - открыть файл для типа byte, узнать размер, потом открыть файл для массива данного размера и считать за раз.
Но это выдаёт raised STORAGE_ERROR : EXCEPTION_STACK_OVERFLOW (даже после того, как я вместо заведения массива на стеке завёл указатель) Да и мало ли размер файла изменится между первым и вторым открытиями. И вообще много дёргать винт это плохо. Последний вариант - через ВинАПИ, но мне неохота туда лезть. ПС Настраиваемые пакеты во внутреннем блоке - это сильно. Реально круто, я про язык. Сообщение отредактировано: TarasBer - 31.05.2011 12:16 -------------------- |
![]() ![]() |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата возник облом на файле 3МБ (какое-то исключение raised ADA.IO_EXCEPTIONS.DEVICE_ERROR : Invalid argument), причём именно в случае Is_Workaround_Possible. Я принудительно выставил Is_Workaround_Possible в false. И всё нормально прочиталось Очень странно. Воообще-то такое поведение должно было иметь место в обратном случае: если Is_Workaround_Possible равно False, а ты насильно перекинул в True, и из-за несоответствия размеров и(ли) выравнивания процедура Read не смогла прочесть информацию в SE_Buffer. В таком случае Read бросает IO_Exceptions.Device_Error... Получается, что Is_Workaround_Possible вернула True, но буферные переменные не соответствуют друг другу? Попробуй действовать наверняка: прямо внутри BlockRead опиши подтипы: subtype mysz_Test_A is Byte_Buffer(1 .. Buffer'Length);, и проверяй размер/выравнивание этих подтипов. У меня при подключении твоего пакета без сбоя прочитались 3-х, 6-ти и 9-ти Мб файлы. И не только прочитались, а и скопировались в другой стрим (ну да, я добавил еще создание файла в твой код). Хотя, если тебя скорость устраивает... Может, в 2010 уже починили эту багу просто? в GNAT-2009 с этим невозможно было мириться. |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 23:26 |