powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Очень долгая распаковка Jpeg в Delphi 10
25 сообщений из 50, страница 1 из 2
Очень долгая распаковка Jpeg в Delphi 10
    #39982868
Вопрос простой, почему код ниже скомпилированный в delphi 7 выполняется за 2.125 секунды, а Delphi 10 за 22.703, более чем в 10 раз дольше. Simple.jpg картинка размером 10000 на 7000 (для примера).

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  StartTime := GetTickCount;
    Picture:=TPicture.Create;
    bmp:=TBitmap.Create;

    Picture.LoadFromFile('c:\Simple.jpg');
    bmp.Assign(Picture.Graphic); //по сути всё время выполнения в данной строчке

    Picture.Free;

   StartTime := GetTickCount - StartTime;
   Label1.Caption := Format('Выполнено за %.2u mS', [StartTime]);
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982871
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
F7 не даёт ответ ?
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982872
DimaBr
F7 не даёт ответ ?

Все 22 секунды это:
Код: pascal
1.
bmp.Assign(Picture.Graphic);


Можно, конечно, внутрь залезть, но не думаю, что я там смогу понять, что да почему.
Во всех примерах в "интернетах" примерно так подгружают Jpeg, ну или сторонние библиотеки.
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982873
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич
Вопрос простой, почему код ниже скомпилированный в delphi 7 выполняется за 2.125 секунды, а Delphi 10 за 22.703, более чем в 10 раз дольше. Simple.jpg картинка размером 10000 на 7000 (для примера).

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  StartTime := GetTickCount;
    Picture:=TPicture.Create;
    bmp:=TBitmap.Create;

    Picture.LoadFromFile('c:\Simple.jpg');
    bmp.Assign(Picture.Graphic); //по сути всё время выполнения в данной строчке

    Picture.Free;

   StartTime := GetTickCount - StartTime;
   Label1.Caption := Format('Выполнено за %.2u mS', [StartTime]);

10000 на 7000 - это почти 300 мегов. Что-то в memory manager-е?

64-битное приложение не пробовали?
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982875
rgreat
10000 на 7000 - это почти 300 мегов. Что-то в memory manager-е?


В Jpeg около 10 Мб, в BMP и памяти где-то 100.
rgreat

64-битное приложение не пробовали?

эээ... 0.563 секунды. Почему...
Ничего не понимаю.
Почему такая разница в 32 и 64, я в эту сторону даже и не думал смотреть...
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982876
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скорость сравниваете для релизных сборок?
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982878
zedxxx
Скорость сравниваете для релизных сборок?

Delphi? Торрент эдишн, вроде релизные 7ка точно, 10ка (Version 26.0.36039.7899).
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982881
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет. Вы проект собираете в Release или Debug версии?
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982882
zedxxx
Нет. Вы проект собираете в Release или Debug версии?

Сейчас прогнал в Reliase - ничего не поменялось. Но разница в 32 и 64 конечно колоссальная.
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982884
...
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982886
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю, как было в Delphi 7, а в современных версиях, Delphi использует сишную libjpeg для работы с jpeg. Причем, для win32 они компилируют её своим старым С++ компилятором, а для win64 компиляция производится уже LLVM компилятором. Отсюда и возможная разница в скорости win32/win64.

Если вам критична скорость, то посмотрите в сторону libjpeg-turbo (например, вот с этой обёрткой).
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982890
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тынц - через TWICImage 5 сек на XE2, через TJPEGImage - 22 сек
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982892
zedxxx
Не знаю, как было в Delphi 7, а в современных версиях, Delphi использует сишную libjpeg для работы с jpeg. Причем, для win32 они компилируют её своим старым С++ компилятором, а для win64 компиляция производится уже LLVM компилятором. Отсюда и возможная разница в скорости win32/win64.

Если вам критична скорость, то посмотрите в сторону libjpeg-turbo (например, вот с этой обёрткой).

Ясно. Спасибо.
DimaBr
тынц - через TWICImage 5 сек на XE2, через TJPEGImage - 22 сек

Спасибо, потыкаю Wic.
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39982903
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич
Вопрос простой, почему код ниже скомпилированный в delphi 7 выполняется за 2.125 секунды, а Delphi 10 за 22.703, более чем в 10 раз дольше.
Потому что TJPEGImage - г..но даже в D7. И по закону жанра стало полным г..ном.
Даже GDI+, явно не заточенный под быстродействие, читает в разы быстрее.
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39983079
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, GDI+ в последних Виндах хорошо подтянули, уже не так сильно остаёт от libjpeg-turbo (раза в полтора).
WIC не пробовал и не вижу в нём большого смысла - загрузка файлов там наверняка та же самая, что и в GDI+, но на XP не будет работать (если вдруг понадобится).
Замедление стандартного модуля в 10 раз это конечно странно, возможно сишные obj (которые собст-но и грузят картинку) по ошибке скомпилировали в дебаге.
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39983972
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня все одна мысль терзает: почему бы в движки видеокарт, куда всякую фигню пихают, не вставить прямую отрисовку jpeg-ов? По схеме: кидаешь jpeg (после Хаффман-раскодировки) в видеопамять, и он рисуется на поверхности.
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39983973
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и до. Видюха и с распаковкой справилась бы с её-то многоядерностью...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39983974
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Можно и до. Видюха и с распаковкой справилась бы с её-то многоядерностью...
ЕМНИП, распаковка там не параллелится.
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39983985
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

Текстуры сжимают другими алгоритмами
Собственно они сжатыми в видеопамяти и хранятся
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39983991
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://www.fastvideo.ru/info/cuda/cuda-jpeg-decoder.htm

Распаковка JPEG:
GeForce GTX 580 (512 ядер) - 3 ГБайт в секунду
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39984026
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
GeForce GTX 580 (512 ядер) - 3 ГБайт в секунду
ЧТД.
Теперь осталось уговорить MS добавить это в стандарт DirectX.
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39984034
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

ASTC даёт сжатие до 32 раз
Зачем им jpeg )
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39984036
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

авторДекодирование сжатых изображений на видеокарте имеет смысл только при условии распараллеливания задачи. Если алгоритм декодирования последовательный, то использовать видеокарту не имеет смысла, поскольку в этом случае CPU будет во много раз быстрее, чем GPU. Для реализации возможности распараллеливания декодирования нужно ещё на этапе кодирования ставить специальные маркеры перед группами блоков 8х8.
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39984048
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати в проектах Tiny.Library и BrainMM я освоил подход, когда Си/C++ код компилируется в obj файлы сразу под несколько платформ, и относительно легко линкуется в Delphi, FreePascal, C++Builder. Там есть уже набор утилит, скриптов, наборов опций, чтобы осуществлять всю эту рутину. Удаётся даже поддерживать register-соглашение, которого по умолчанию в Си/С++ нет.

Это я к чему говорю. Если кто-то хочет использовать статически прилинкованный код, написанный на Си/С++, например для конвертации jpeg, png, для поддержки TLS того же самого - обращайтесь - я буду помогать чем смогу.
...
Рейтинг: 0 / 0
Очень долгая распаковка Jpeg в Delphi 10
    #39984051
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU
rgreat,

авторДекодирование сжатых изображений на видеокарте имеет смысл только при условии распараллеливания задачи. Если алгоритм декодирования последовательный, то использовать видеокарту не имеет смысла, поскольку в этом случае CPU будет во много раз быстрее, чем GPU. Для реализации возможности распараллеливания декодирования нужно ещё на этапе кодирования ставить специальные маркеры перед группами блоков 8х8.
Хаффман-декодирование можно и на CPU делать (о чем я сразу написал),по сравнению с DCT оно копеечное.
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Очень долгая распаковка Jpeg в Delphi 10
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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