Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
| DimaPetrov |
23.04.2007 5:15
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: 0 |
Код 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 |
23.04.2007 20:32
Сообщение
#2
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: 8 |
На Form1 находится 1000 компонентов TDot. Этот цикл выполняеться за 3 секунды. Без строки {1} 1.5, без {1} и {2} милисекунды. Как это можно ускорить? У тебя для каждой точки происходят вычисления с плавающей точкой, а это достаточно ресурсоёмкая процедура. А ещё, я бы сказал, что у тебя классическая задача параллелизма под данным. Если машина имеет K процессоров, то можно породить K ниток, которые преобразуют все твои точки в нужный масштаб. При большом объёме данных ускорение вычислений будет стремиться к K-раз. Всё это было бы замечательно. Еслиб не одно НО. Left, Top - это свойства? Если да, то их изменение приводит к перерисовке точки, а это дико длительная операция (относительно элементарного деления). Сообщение отредактировано: hardcase - 23.04.2007 20:36 -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
DimaPetrov Требуется помощь в ускорение исполнения кода 23.04.2007 5:15
klem4
А что это еще за компоненты такие ? Это экземпля... 23.04.2007 14:25
volvo Пересчет Alignment-а на время цикла отключить не п... 23.04.2007 20:50
Sergy А вот эта
строчка вообще не нужна. Если уже прове... 25.04.2007 22:21![]() ![]() |
|
Текстовая версия | 8.12.2025 13:28 |