![]() |
![]() |
Bokul |
![]()
Сообщение
#1
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Реализовал объект многоугольник, который имеет неопределенное количество вершин. Но скорость работы с ним критическая, поэтому надо как можно сильнее его оптимизировать.
Вот, что он из себя представляет:
Кольцевой список
Модуль для работы с векторами
Программа для проверки минимальной работоспособности
Три модуля вмести: ![]() PS в принципе код прозрачен, но если что-то не понятно - спрашивайте. ![]() -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Попытался добавить статистику, но как-то не сильно она хочет работать Чего-то ты переусложнил по-моему работу со статистикой... Смотри, как это же делал бы я:1. Пишем очень простой модуль: unit stat;Как видишь - ничего особенного, просто выделяем место для хранения статистики, и процедура для их печати 2. Пишем 2 очень маленьких файлика: before.inc begin и after.inc begin 3. Зачем? А вот зачем: теперь вместо конструкции вида: procedure TPolygone.ForEach(proc:ToDO);достаточно написать procedure TPolygone.ForEach(proc:ToDO);(понятно назначение тех двух переменных - я ввел их просто чтобы не описывать вот эти вои локальные переменные, и сэкономить этим на объеме текста)... А проверять {$ifdef StatisticPolygone} можно и внутри файлов before.inc/after.inc Переделал твою программу, добавив в нее свой модуль статистики - вот что получилось: Цитата(Console) ForEach: Number: 10000 Time: 15 Time for each: 0.001500 По-моему, больше похоже на правду... А насчет Difference я тебе уже сказал в другой теме, куда смотреть...Increase: Number: 10000 Time: 0 Time for each: 0.000000 Decrease: Number: 10000 Time: 15 Time for each: 0.001500 ContainsPoint: Number: 10000 Time: 47 Time for each: 0.004700 ContainsOtherPolyg: Number: 10000 Time: 0 Time for each: 0.000000 IsInside: Number: 10000 Time: 0 Time for each: 0.000000 methods calling: Init: count:: 10000 time:: 0 average:: 0.00000 siAddVertex: count:: 1000000 time:: 250 average:: 0.00025 siIncrease: count:: 10000 time:: 0 average:: 0.00000 siDecrease: count:: 10000 time:: 15 average:: 0.00150 siForEach: count:: 10000 time:: 15 average:: 0.00150 siContainsPoint: count:: 30000 time:: 47 average:: 0.00157 siContainsOtherPolyg: count:: 10000 time:: 0 average:: 0.00000 siInside: count:: 20000 time:: 0 average:: 0.00000 siDone: count:: 0 time:: 0 zero division Difference: -79872 |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 23:27 |