Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.01.18;
Скачать: [xml.tar.bz2];

Вниз

TList и много объектов   Найти похожие ветки 

 
Vitaliy_____   (2008-12-02 11:23) [0]

Доброе время суток!
Есть такая проблема: существует программа, с которой я сейчас работаю. Часть ее - графический редактор. В структуре данных, разработанной черт знает когда задумано следующее:

1) Все "точки" объектов хранятся в одном большом списке на основе TList
2) Допустим, "линия" представлена как атрибуты линии + два числа - номера первой и последней точек.

При работе с множеством объектов возникает проблема: выборка точки из списка (делается через Items:  TozList.Items[i]) становится продолжительной (речь о неск. десятках тысяч линий и не менее неск. сотен тысяч точек).
Вопрос состоит в том, можно ли ускорить скажем рисовку линии, не изменяя описанной выше структуры хранения данных?
Гарантированно, что точки в списке лежат последовательно. Можно ли выбрав первую точку линии (29357 в списке точек, например), "быстро" получить (видимо не через .Items[29358]) следующую точку.
Есть ли у кого мысли по этому поводу - буду рад услышать!


 
Сергей М. ©   (2008-12-02 11:31) [1]


> выборка точки из списка (делается через Items:  TozList.
> Items[i]) становится продолжительной


При размере списка 30000 элементов ?
Не верю)


 
Jeer ©   (2008-12-02 11:56) [2]


> можно ли ускорить скажем рисовку линии,


Вот здесь и копай - доступ по индексу не должен настолько замедлять, чтобы стало нетерпимо больно.


 
Vitaliy_____   (2008-12-02 12:28) [3]


> При размере списка 30000 элементов ?
> Не верю)

300 000
Может кто может объяснить или дать ссылку на описание структуры TList? Если это СПИСОК, то для получения i-го элемента надо перейти от первого к нему через все промежуточные. Хотя List property (TList) настораживает, видимо у него есть ссылки на все элементы списка. В любом случае, работа со списком медленная, так как перерисовка всех данных с чтением их из файла (не занесить в память а сразу отрисовывать) происходит быстрее чем при рисовки тех же данных из памяти (смешно, правда?!)...
Проблема именно с доступом к данным а не с рисовкой.


 
Palladin ©   (2008-12-02 12:31) [4]


> Vitaliy_____   (02.12.08 12:28) [3]

:))) нет, TList это не связанный список, это обыкновенный список - массив. И что бы обратится к i элементу нужно просто обратиться к i элементу. Все в справке написано.


 
Сергей М. ©   (2008-12-02 12:36) [5]


> кто может объяснить или дать ссылку на описание структуры
> TList?


Это не структура, а класс.

см. исходники в classes.pas


> Проблема именно с доступом к данным


Доступ к i-му указателю, хранящемуся в списке, контролируемому объектом класса TList, осуществляется мгновенно.

Влияние свопинга при этом не учитываем - это твои проблемы.


 
icWasya ©   (2008-12-02 14:12) [6]

можно чуть ускорить - за счёт убирания вызова процедуры

вместо
var
 TozList:TList;
 Toz:TObject;
...
for i:=0 to TozList.Count-1 do
Toz:=TObject(TozList.Items[I]);


var
 TozList:TList;
 P:PPointerList;
 Toz:TObject;
...

P:=TozList.List;

for i:=0 to TozList.Count-1 do
Toz:=TObject(P[I]);


 
Vitaliy_____   (2008-12-04 06:16) [7]

Гм, спасибо Сергей М. за его недоверие :) Не поленился проверить, создал отдельную программку, сгенерировал 1,000,000 точек, 10,000,000 раз взял случайную точку и потратил на это 0.2 секунды. У нас таких объемов пока нет и вряд ли будет, проблема явно не тут :) Заодно нашел в программе некорректную работу с памятью в части добавления - но это уже другая песня.
icWasya Тут есть проблема, что при удалении точек без Pack будут пустые ссылки в списке, а проверять на nil - не будет выгоды чем просто Items использовать.
В общем, тему можно закрыть, собака порылась не тут :)


 
MsGuns ©   (2008-12-04 10:35) [8]

>1) Все "точки" объектов хранятся в одном большом списке на основе TList
>2) Допустим, "линия" представлена как атрибуты линии + два числа - номера первой и последней точек.

Т.е. если есть квадрат 100х100 пикселей, то в списке будет 10000 ссылок ?


 
Anatoly Podgoretsky ©   (2008-12-04 11:04) [9]

> MsGuns  (04.12.2008 10:35:08)  [8]

Если квадрат, то тоже две ссылки, вот полилайн ничем не ограничен.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.01.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
15-1227639224
Footballer
2008-11-25 21:53
2009.01.18
Проект информационной безопасности


2-1228747542
Lamer6666
2008-12-08 17:45
2009.01.18
Колличество выделенных записей в DBGrid


2-1228255215
Te
2008-12-03 01:00
2009.01.18
Работа с классом


15-1227627498
Trinimak
2008-11-25 18:38
2009.01.18
data diagram


2-1228400690
istok2
2008-12-04 17:24
2009.01.18
изучить почему не удаляется файл...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский