Делал простенький шифраторф/дешифратор, все работает, но тормозит жутко при чтении/записи, т.к. читает файлы побайтово. Можно ли как-то кеш прикрутить? Как его вообще организовать? В Делфи/VB была такая штука, как маппинг файла в память, но в хиасме вроде ниче такого нет... Схемка приаттачена.
Зы, эта схемка при обработке файла меняет порядок следования битов в каждом байте на обратный Соответственно при первой обработке файл становится "битым", т.е. воспринимается как бессмысленная каша, а при второй обработке восстанавливается исходная рабочая версия файла. Для дома самое оно.
code_13532.txt
------------ Дoбавленo в 17.55:
Если влом в схеме копатся, хотябы словами расскажите, как в хиасме можно ускорить чтение/запись, а то эта схемка тока 5кб/сек выдает.
Этот топик читают: Гость
Ответов: 273
Рейтинг: 29
|
|||
карма: 0 |
| ||
файлы: 1 | code_13532.txt [4.7KB] [179] |
Главный модератор
Ответов: 2999
Рейтинг: 396
|
|||
Ищите по форуму - год или два назад обсуждали эту проблему.
|
|||
карма: 6 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
копируем в MemoryStream и работаем с ним уже
|
|||
карма: 27 |
|
Ответов: 8926
Рейтинг: 823
|
|||
tomas, 75% времени обработки занимает преобразование байтов: code_13534.txt, сначала надо копать в этом направлении.
|
|||
карма: 19 |
| ||
файлы: 1 | code_13534.txt [3.4KB] [157] |
Ответов: 273
Рейтинг: 29
|
|||
Хорошо, поработаю с этим MemoryStream.
Насчет преобразования байтов: В принципе можно ускорить алгоритм, но все-равно, даже увеличение скорости вчетверо(до 20кб/сек) слишком мало. Копать надо именно в сторону кеша, т.к. побайтовый доступ к файлу слишком медленный. |
|||
карма: 0 |
|
Ответов: 3851
Рейтинг: 159
|
|||
tomas писал(а): побайтовый доступ к файлу слишком медленный |
|||
карма: 0 |
|
Ответов: 8926
Рейтинг: 823
|
|||
tomas, на моём кмпьютере FileStream читается ~1 Мб за 13 сек, MemoryStream - за 10 сек
|
|||
карма: 19 |
|
Главный модератор
Ответов: 2999
Рейтинг: 396
|
|||
карма: 6 |
| ||
файлы: 1 | code_13535.txt [1.6KB] [224] |
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Можно попробовать вот такой код (реверс бит в байте написан на ассемблере, за основу взята схема Nica)
Быстрее можно сделать, читая Cardinal (Dword), но сложность возникает с длинами файлов некратными четырем |
|||
карма: 22 |
|
Ответов: 8926
Рейтинг: 823
|
|||
nesco, принцип: "Ни строчки кода" нарушаем? Тогда уж сразу компонент делать надо!
|
|||
карма: 19 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Самое быстрое преобразование - табличное. Сначала готовим массив из 256 значений, а потом используем входной байт как индекс при чтении из массива, считанное значение записывается в файл.
|
|||
карма: 1 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Леонид писал(а): принцип: "Ни строчки кода" нарушаем?Ну, про код ничего не написано было, и задание "Ни строчки кода" никто не ставил. Зато, я на кошках потренировался tsdima писал(а): Самое быстрое преобразование - табличноеСогласен, можно и табличное воткнуть |
|||
карма: 22 |
|
Ответов: 8926
Рейтинг: 823
|
|||
nesco, (Рад за сочинцев, уже сами шутить начали! )
|
|||
карма: 19 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Вот схема тестирования различных типов реализации реверс-алгоритма (по-умолчанию стоит табличный на компонентах).
Результат вскрытия показал, что табличный алгоритм на компонентах не сильно отличается от ассемблерного кода IC, и на порядок быстрее исходной реализации. Схему можно потестировать самому переключая входной линк на схеме между разными модулями. Из всего следует, что самым быстрым предполагается ассемблерная реализация табличного алгоритма (по-необходимости, выполняется своими силами и за свой счет )
|
|||
карма: 22 |
|
Главный модератор
Ответов: 2999
Рейтинг: 396
|
|||
nesco писал(а): за основу взята схема NicaЭту схему выложил на форум Galkov |
|||
карма: 6 |
|