TList и динамические массивы - что быстрей?
От: Mihailo Германия  
Дата: 10.12.04 20:14
Оценка:
Работаю с построчным выводом полигона на канву. Нужно много и быстро просчитывать координаты и возвращать их из функции. Вот думаю в чем лучше их хранить: в списке TList или заталкивать в динамический массив. Варианты только такие, т.к. результирующие массивы координат нужно вернуть из функции.
Что посоветуете? Delphi 7 не дот-нетовская.
Re: TList и динамические массивы - что быстрей?
От: Anatoly Podgoretsky Эстония http://www.podgoretsky.com
Дата: 11.12.04 09:10
Оценка: +1
Здравствуйте, Mihailo, Вы писали:

M>Работаю с построчным выводом полигона на канву. Нужно много и быстро просчитывать координаты и возвращать их из функции. Вот думаю в чем лучше их хранить: в списке TList или заталкивать в динамический массив. Варианты только такие, т.к. результирующие массивы координат нужно вернуть из функции.


Динамический массив быстрее, так как TList тот же динамический массив, но только указателей на данные, но это быстрее будет только в том случае, если будешь выделять размер массива весь сразу или хотя бы по тому же алгоритму, как и TList — переменным размером увеличения блока.
Re: TList и динамические массивы - что быстрей?
От: akasoft Россия  
Дата: 11.12.04 12:10
Оценка:
Здравствуйте, Mihailo, Вы писали:

M>Что посоветуете? Delphi 7


Ставлю на динмассивы.
... << RSDN@Home 1.1.4 beta 3 rev. 255 silent >>
Re: TList и динамические массивы - что быстрей?
От: Аноним  
Дата: 11.12.04 13:49
Оценка:
Здравствуйте, Mihailo, Вы писали:

M>Работаю с построчным выводом полигона на канву. Нужно много и быстро просчитывать координаты и возвращать их из функции. Вот думаю в чем лучше их хранить: в списке TList или заталкивать в динамический массив. Варианты только такие, т.к. результирующие массивы координат нужно вернуть из функции.

Лучше TList, т.к. он наращивает память кусками, эдакй кэш у него получается. А динамический массив каждый раз SetLength требует.
Re[2]: TList и динамические массивы - что быстрей?
От: kavlad Россия http://www.wavesoft.ru
Дата: 11.12.04 14:24
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Лучше TList, т.к. он наращивает память кусками, эдакй кэш у него получается. А динамический массив каждый раз SetLength требует.


Зато обращение к элементу идет гораздо дольше (в общем случае), т.к. элементы могут быть как угодно раскиданы по памяти
Лучший вариант — написать свой собственный TList на базе массива, выделять память "большими" кусками и т.п.
Есть множество готовых реализаций таких списков. Одна из них в замечательной книге Бакнелла "Фундаментальные алгоритмы и структуры данных в Delphi" Исходный код доступен на сайте издательства.
... По ушам лупит начальство
Re[2]: TList и динамические массивы - что быстрей?
От: Anatoly Podgoretsky Эстония http://www.podgoretsky.com
Дата: 11.12.04 14:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Лучше TList, т.к. он наращивает память кусками, эдакй кэш у него получается. А динамический массив каждый раз SetLength требует.


А тебе кто мешает? TList использует тот же динамический массив и туже сабую функцию SetLength
Re[3]: TList и динамические массивы - что быстрей?
От: futureking  
Дата: 13.12.04 11:55
Оценка:
Здравствуйте, Anatoly Podgoretsky, Вы писали:

AP>Здравствуйте, Аноним, Вы писали:


А>>Лучше TList, т.к. он наращивает память кусками, эдакй кэш у него получается. А динамический массив каждый раз SetLength требует.


AP>А тебе кто мешает? TList использует тот же динамический массив и туже сабую функцию SetLength

а не удобнее использовать контейнеры STL?
Всё зависит от конкретной задачи!
Re: TList и динамические массивы - что быстрей?
От: Softwarer http://softwarer.ru
Дата: 14.12.04 08:16
Оценка:
Здравствуйте, Mihailo, Вы писали:

Зависит от операций, которые будут выполняться с данными. В большинстве случаев ДМ будут быстрее, но например сортировка — скорее всего, быстрее в TList.

Тонкость в том, что TList очень легко "затормозить", если работать с ним неправильно. В частности, стоит помнить о свойстве TList.List.
Re: TList и динамические массивы - что быстрей?
От: Arsu Россия  
Дата: 14.12.04 09:30
Оценка: +1
А просто массивы — не подойдут?
Они явно сделают и списки, и дин. массивы — как-никак, прямая адресация
Re[4]: TList и динамические массивы - что быстрей?
От: kavlad Россия http://www.wavesoft.ru
Дата: 14.12.04 10:01
Оценка:
Здравствуйте, futureking, Вы писали:

F>а не удобнее использовать контейнеры STL?


В Delphi7 ?
... По ушам лупит начальство
Re: TList и динамические массивы - что быстрей?
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.12.04 07:49
Оценка: 6 (1)
Здравствуйте, Mihailo, Вы писали:

M>Работаю с построчным выводом полигона на канву. Нужно много и быстро просчитывать координаты и возвращать их из функции. Вот думаю в чем лучше их хранить: в списке TList или заталкивать в динамический массив. Варианты только такие, т.к. результирующие массивы координат нужно вернуть из функции.

M>Что посоветуете? Delphi 7 не дот-нетовская.
Как уже сказали, динамический массив будет заведомо быстрее.
Но ни в коем случае не пиши такого кода:
SetLength(MyArray, Length(MyArray)+1);

Это — страшные тормоза. Вместо этого всегда переаллокируй крупными кусками. Оптимально хранить "указатель заполнения" и удваивать размер массива при достижении 100% (подробнее см. в сорцах TList)
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: TList и динамические массивы - что быстрей?
От: Romkin  
Дата: 16.12.04 15:39
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Как уже сказали, динамический массив будет заведомо быстрее.

S>Но ни в коем случае не пиши такого кода:
S>
S>SetLength(MyArray, Length(MyArray)+1);
S>

S>Это — страшные тормоза. Вместо этого всегда переаллокируй крупными кусками. Оптимально хранить "указатель заполнения" и удваивать размер массива при достижении 100% (подробнее см. в сорцах TList)

Хе-хе ;)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.