Страница 1 из 1

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

Добавлено: 07 Май 2014, 11:19
kreator
C8.0.9759, ABC. На экране нужно вывести много линий и боксов (порядка 6-7 тысяч). Вывод раньше был через LINE() и т.д. Быстродействие устраивало. Решили перевести вывод чрез CREATE. Время вывода увеличилось очень сильно. Создал уже тестовый пример. Оказалось время через CREATE больше в 10 раз где-то. Народ как думает - проблема версии или постоянная проблема? А может можно замену CREATE найти, в WinAPI, например.

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

Добавлено: 07 Май 2014, 12:27
Дед Пахом
Я так понимаю, CREATE-ом Вы создаёте полноценные контролы (7 тысяч, мама дорогая!). Посмотрите шаблоны svgraph, как там делается, вполне прилично рисуют.

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

Добавлено: 07 Май 2014, 14:15
kreator
Посмотрел. SV рисуют всё line() и box(). Дело вот в чём. У нас так и было. Много статичных линий и блоков, и немного динамичных линий же и блоков, у которых надо менять цвет, местоположение, создавать, удалять их. Но, при переносе этого добра из 6.3 в 8.0 оказалось, что линии, например, созданные CREATE, лежа под линиями, созданными LINE(). Думали - CREATE нам поможет. Ан нет. Тогда откатываемся назад и пытаемся понять, почему линии ложатся под.
Самое обидное, что, убивая таким образом время, устойчивого решения можно не найти - в следующий версии опять может быть как в 6.3.

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

Добавлено: 07 Май 2014, 17:05
Yufil
А надо перед Create сказать 0{Prop:Buffer}=1
И будет щастье...

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

Добавлено: 07 Май 2014, 17:22
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#)
Я ожидаю, что синий прямоугольник перекроет красную линию. Ничего подобного - красная линия наверху. Есть подозрение, что в другой версии по-другому.

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

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

Кстати. Бяда... Программа падает на вызове ColorDialog под win8.1/64 Мож кто что подскажет?

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

Добавлено: 08 Май 2014, 10:06
kreator
Проверил в 9.0. Такая же фигня. По Create всё ровно и хорошо. Но при этом возвращаемся к моему первому посту - создание 6 тысяч линий и прямоугольников занимает порядка 3 сек, что в 10 (Десять!!!) раз больше, чем через line() и box(). И как объяснить пользователю, что при переходе на новую версию быстродействие так сильно упало? И где плюсы при при этом?

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

Добавлено: 08 Май 2014, 11:22
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 пока некопенгаген...

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

Добавлено: 08 Май 2014, 14:05
kreator
Нашёл некий вариант, более менее устраивающий. Оказалось, что регион встаёт наверх.