|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
быстро освободить массив с >1000 изображениями
подскажите пожалуйста есть ли способ быстро освободить массив image с более тысячи иконками?
после освобождения надо заново загружать туда другие. делаю так for i:=length(ims)-1 downto 0 do ims[i].free; setlength(ims,0); но когда их много то довольно таки долго эта операция происходит.... |
#2
|
||||
|
||||
Быстрого способа не знаю, но можно попытаться немного выиграть в скорости, если использовать не динамический, а обычный массив с большим количеством элементов.
Ещё я от препода слышал, что цикл For...DownTo...Do работает медленнее, чем For...To...Do (не знаю насколько это правда), но в этом случае придётся для скорости сделать как-то так: Код:
N:=length(ims)-1; for i:=0 to N do ims[i].free; setlength(ims,0); Чем больше знаешь, тем сильнее осознаёшь, что знаешь гораздо меньше, чем не знаешь!.. |
#3
|
||||
|
||||
Цикл "вверх" (to) врятли работает быстрее, потому что в некоторых случаях делфи "переворачивает" обычные циклы в целях оптимизации (были темы на форуме). Да и в машинном коде цикл "вниз" организуется меньшим числом команд, есть даже команда loop специально для этого.
Для цикла "вверх" нужно на каждом проходе увеличивать i и сравнивать с результатом. А вот для цикла "вниз до нуля" достаточно только уменьшать - когда i станет равно нулю, автоматически выставится флаг нуля, в данном случае сигнализирующий об окончании цикла. Более быстрого способа не вижу. Можно попробовать сделать несколько больших картинок (как бы ленты из иконок) и, в зависимости от ситуации, копировать и отрисовать нужный участок. Тогда освобождение будет быстрее. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 25.01.2012 в 16:42. |
#4
|
|||
|
|||
деинкрементный цикл выполняется на 2 такта быстрее в реальном режиме, процу нужно лишь знать сколько раз loop сделать
но и с этим не выграешь. мне кажется у винды должны быть какие нибудь функции по управлению динамической памятью Типо нашел где у тебя в памяти объект, злобную винду натравил и все ппц инфе. Все о Delphi на русском |
#5
|
||||
|
||||
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
|||
|
|||
А не лучше ли хранить все изображения в одном битмапе? Напр., для TSpeedButton можно загрузить Glyph, у которого ширина в 4 раза больше высоты и содержит 4 изображения.
В DirectX это тоже используют: UVAtlas Последний раз редактировалось AlexSku, 26.01.2012 в 18:26. |