воскресенье, 24 августа 2008 г.

Gif оптимизация

Наконец-то кошмарному потреблению GDI объектов для отрисовки gif похоже приходит конец. Наткнулся на замечательнейшую библиотечку, умеющую читать gif-файлы (правда не совсем корректно, пришлось изрядно попотеть, чтобы заставить ее работать на уровне TGifImage). Кстати спасибо fd00ch за наводку ;)
Думаю в следующем релизе или через релиз эта библиотека будет внедрена в инфиум (а также в qip2005) и квип станет работать еще быстрее;) (может быть даже уберем ограничение в 20 одновременно отображаемых смайлов)

Как итог сравнительная таблица на 7 тысяч одинаковых смайлов:
старый движок смайлов - занимает 129 Мб оперативной памяти и от 460 GDI объектов (число растет при увеличении окна на весь экран и при последующих изменениях размера)
новый движок - 9-11 МБ оперативной памяти и 62 GDI объекта (причем они относятся к самому окну, сами смайлы не потребляют GDI вообще), число не изменяется ни при каких условиях.

на 7 тысячах разных смайлов:
старый движок занял 190 МБ оперативной памяти и около 5 тысяч GDI объектов. при попытке поизменять размеры тестовый проект вылетел, ибо число GDI росло в геометрической прогрессии.
новый движок прекрасно загрузил все файлы, заняв 250 МБ оперативной памяти (и не заняв ни на 1 GDI объект более предыдущего теста).

Как говорится, эффект налицо. Не думаю, что найдутся извращенцы, одновременно за раз решившие послать 7 тысяч абсолютно разных смайлов:) так что отмена ограничения вполне реальна.

Теперь нужно отполировать имеющиеся наработки и начинать внедрять:) Молитесь за меня, друзья:)