Небыстрая работа Create.

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Небыстрая работа Create.

Сообщение kreator »

C8.0.9759, ABC. На экране нужно вывести много линий и боксов (порядка 6-7 тысяч). Вывод раньше был через LINE() и т.д. Быстродействие устраивало. Решили перевести вывод чрез CREATE. Время вывода увеличилось очень сильно. Создал уже тестовый пример. Оказалось время через CREATE больше в 10 раз где-то. Народ как думает - проблема версии или постоянная проблема? А может можно замену CREATE найти, в WinAPI, например.
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Небыстрая работа Create.

Сообщение Дед Пахом »

Я так понимаю, CREATE-ом Вы создаёте полноценные контролы (7 тысяч, мама дорогая!). Посмотрите шаблоны svgraph, как там делается, вполне прилично рисуют.
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Небыстрая работа Create.

Сообщение kreator »

Посмотрел. SV рисуют всё line() и box(). Дело вот в чём. У нас так и было. Много статичных линий и блоков, и немного динамичных линий же и блоков, у которых надо менять цвет, местоположение, создавать, удалять их. Но, при переносе этого добра из 6.3 в 8.0 оказалось, что линии, например, созданные CREATE, лежа под линиями, созданными LINE(). Думали - CREATE нам поможет. Ан нет. Тогда откатываемся назад и пытаемся понять, почему линии ложатся под.
Самое обидное, что, убивая таким образом время, устойчивого решения можно не найти - в следующий версии опять может быть как в 6.3.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Небыстрая работа Create.

Сообщение Yufil »

А надо перед Create сказать 0{Prop:Buffer}=1
И будет щастье...
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Небыстрая работа Create.

Сообщение kreator »

Ни фига, щастья нет. Вот простой пример:

Код: Выделить всё

setpencolor(COLOR:Red)
line(50,100,500,0)
0{prop:Buffer} = 1
con# = create(0,CREATE:Box)
setposition(con#,200,50,20,150)
con#{PROP:Color,1} = COLOR:Navy
con#{PROP:Fill} = COLOR:Navy
unhide(con#)
Я ожидаю, что синий прямоугольник перекроет красную линию. Ничего подобного - красная линия наверху. Есть подозрение, что в другой версии по-другому.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Небыстрая работа Create.

Сообщение Yufil »

Я, значит, как лох последний читаю слёзные жалобы о тормозах не по-детски. А тут ещё линия не в порядке, вона как... А если создать сначала линию, а уже потом прямоугольник. И оба по Create. Тогда прямоугольник как контрол с большим номером перекроет линию.

Кстати. Бяда... Программа падает на вызове ColorDialog под win8.1/64 Мож кто что подскажет?
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Небыстрая работа Create.

Сообщение kreator »

Проверил в 9.0. Такая же фигня. По Create всё ровно и хорошо. Но при этом возвращаемся к моему первому посту - создание 6 тысяч линий и прямоугольников занимает порядка 3 сек, что в 10 (Десять!!!) раз больше, чем через line() и box(). И как объяснить пользователю, что при переходе на новую версию быстродействие так сильно упало? И где плюсы при при этом?
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Небыстрая работа Create.

Сообщение Yufil »

Возвращаемся :)
А Prop:Buffer перед Create установил в 1 ? В документации было выражение "Dramatically increased..."
Иначе некошерно.

Другой вариант - в момент отрисовки спрятать само окно, а после вернуть на место

Код: Выделить всё

0{Prop:Buffer}=1  ! Или Hide(0) 
Loop 
   Line# = Create(0,Create:Line)
....
   Unhide(Line#)
   Box# = Create(0,Create:Box) 
.... 
   Unhide(Box#) 
End 
! Может быть, Unhide(0). Prop:Buffer не трогать! 
Display() 
Впрочем, это относилось к CW6, в CW9 пока некопенгаген...
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Небыстрая работа Create.

Сообщение kreator »

Нашёл некий вариант, более менее устраивающий. Оказалось, что регион встаёт наверх.
We are hard at work… for you. :)
Ответить