Здравствуйте, Gregory, Вы писали:
G>А не знает-ли кто, господа, как оптимизировать графический вывод в View. А то скролинг страшный как война с Иракаом. G>Если на прямую выводить, то мигает как аварийная сигнализация, а если сначала в память а потом BitBit, то тормозит страшно. Если бы вот как в Excel...И как им это удается?
Создание битмапины занимает кучу времени, причем оно нелинено растет в зависимости от размера битмапины.
Идеальный вариант такой: не надо отрисовывать все. Надо отрисовывать только инвалидные области.
[]
P>>+ то же самое насчет шрифтов
В>А я так понял, что шрифт не фиксированный и у каждой ячейки он может быть свой. В>Если количество используемых шрифтов ограничено, то тогда клнечно имеет смысл и их сформировать один раз и на всегда.
Ну не бесконечное же число... А вообще, создание шрифта весьма и весьма дорогостоящая операция.
Здравствуйте, Serguei666, Вы писали:
S>Создание битмапины занимает кучу времени, причем оно нелинено растет в зависимости от размера битмапины.
По сравнению с самой прорисовкой в цикле — слезы. S>Идеальный вариант такой: не надо отрисовывать все. Надо отрисовывать только инвалидные области.
А если ивалиден весь клиент (PageUp\PageDn).
Не дай своим глазам увидеть, а ушам услышать то, что ты не сможешь объяснить.
Абрахам ван Хелсинг
Здравствуйте, Gregory, Вы писали:
G>Здравствуйте, Serguei666, Вы писали:
S>>Создание битмапины занимает кучу времени, причем оно нелинено растет в зависимости от размера битмапины. G>По сравнению с самой прорисовкой в цикле — слезы.
Так у вас сама отрисовка занимает бОльшую часть времени? Тогда оптимизировать именно ее.
Как?
а) Уменьшением количествя создания временных обьектов — типа ручек, фонтов, кисточек.
б) Постаратся уменьшить количество вызовов SelectObject, SetTextColor и т.д.
б) Не рисовать ячеек, которые находятся за границей клиентской области. У вас я не вижу никаких попыток это сделать
То, что у вас сейчас есть — успешно поддается оптимизации.
И еще раз напомню — рисовать только инвалидные области
S>>Идеальный вариант такой: не надо отрисовывать все. Надо отрисовывать только инвалидные области. G>А если ивалиден весь клиент (PageUp\PageDn).
Это не противоречит тому, что я сказал. Если инвалиден весь клиент, значит, отрисовывать всего клиета.
Здравствуйте, Serguei666, Вы писали:
S>Так у вас сама отрисовка занимает бОльшую часть времени? Тогда оптимизировать именно ее. S>Как? S>а) Уменьшением количествя создания временных обьектов — типа ручек, фонтов, кисточек. S>б) Постаратся уменьшить количество вызовов SelectObject, SetTextColor и т.д. S>б) Не рисовать ячеек, которые находятся за границей клиентской области. У вас я не вижу никаких попыток это сделать
Плохо смотришь.
for (; CellID.Row() < nRows && y <= ClientRect.bottom; CellID.Row()++)
S>То, что у вас сейчас есть — успешно поддается оптимизации. S>И еще раз напомню — рисовать только инвалидные области
Господа! Еще раз повторяю. Все это — ловля блох! Наиблее тормозящей функцией, время выполненя которой состовляет ~2/3 от общего, является DrawText. Привожу очередные результаты измерений:
Rctangle draw time: 20 Text draw time: 171
Rctangle draw time: 30 Text draw time: 150
Rctangle draw time: 30 Text draw time: 140
Rctangle draw time: 30 Text draw time: 180
Rctangle draw time: 50 Text draw time: 130
Rctangle draw time: 30 Text draw time: 140
Не дай своим глазам увидеть, а ушам услышать то, что ты не сможешь объяснить.
Абрахам ван Хелсинг
Да, ты знаешь, я это тогда попробовал, и визуально эффекта оценить не смог, поэтому решил, что хрен редьки не слаще. Но цифры — самая упрямая в мире вещь! Видимо явного эффекта небыло заметно потому, что тормозили битмампы и CDC, с которыми теперь следует бороться.
Не дай своим глазам увидеть, а ушам услышать то, что ты не сможешь объяснить.
Абрахам ван Хелсинг