![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
DimaPetrov |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код for i:=0 to Form1.ControlCount-1 do if (Form1.Controls[i] is Tdot) then begin v:=(Form1.Controls[i] as Tdot); v.left:=Trunc((v.real_X-X_tekmap)/Scale_tekMap); {1} v.top:=Trunc((v.real_Y-y_tekmap)/Scale_tekMap); {1} На Form1 находится 1000 компонентов TDot. Этот цикл выполняеться за 3 секунды. Без строки {1} 1.5, без {1} и {2} милисекунды. Как это можно ускорить? Сообщение отредактировано: DimaPetrov - 23.04.2007 5:18 |
![]() ![]() |
hardcase |
![]()
Сообщение
#2
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
На Form1 находится 1000 компонентов TDot. Этот цикл выполняеться за 3 секунды. Без строки {1} 1.5, без {1} и {2} милисекунды. Как это можно ускорить? У тебя для каждой точки происходят вычисления с плавающей точкой, а это достаточно ресурсоёмкая процедура. А ещё, я бы сказал, что у тебя классическая задача параллелизма под данным. Если машина имеет K процессоров, то можно породить K ниток, которые преобразуют все твои точки в нужный масштаб. При большом объёме данных ускорение вычислений будет стремиться к K-раз. Всё это было бы замечательно. Еслиб не одно НО. Left, Top - это свойства? Если да, то их изменение приводит к перерисовке точки, а это дико длительная операция (относительно элементарного деления). Сообщение отредактировано: hardcase - 23.04.2007 20:36 -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
![]() ![]() |
![]() |
Текстовая версия | 25.06.2025 11:22 |