| Bokul |
26.12.2006 9:32
Сообщение
#1
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: 11 |
Реализовал объект многоугольник, который имеет неопределенное количество вершин. Но скорость работы с ним критическая, поэтому надо как можно сильнее его оптимизировать.
Вот, что он из себя представляет:
Кольцевой список
Модуль для работы с векторами
Программа для проверки минимальной работоспособности
Три модуля вмести:
Polygone.rar ( 13.71 килобайт )
Кол-во скачиваний: 448PS в принципе код прозрачен, но если что-то не понятно - спрашивайте. -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
![]() ![]() |
| volvo |
29.12.2006 13:01
Сообщение
#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 |
Bokul Многоугольник 26.12.2006 9:32
volvo Хм... Чего тут пока оптимизировать - непонятно... ... 26.12.2006 9:59
Bokul
Да, правильно - так и надо, сделаем...
Как в... 26.12.2006 19:32
volvo :shok:
У меня? Я запустил только твою программу, ... 26.12.2006 20:05
Bokul
:blink: И программу проверки мою???
Я не ... 26.12.2006 20:22
Bokul
Я имею ввиду при каких данных происходит такая ... 26.12.2006 21:28
volvo При твоих... Copy+Paste из твоего первого сообщени... 26.12.2006 21:41
Bokul
Точно, почему я сам это не увидел :blink: Само... 26.12.2006 22:18
Bokul Попытался добавить статистику, но как-то не сильно... 27.12.2006 7:50
Bokul
Красиво :wink: Единственный вопрос - как называ... 29.12.2006 20:56![]() ![]() |
|
Текстовая версия | 9.12.2025 19:05 |