![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
z-END |
|
||||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
Вот тестовая прога, ничего умного она не делает=) просто засекает время выполнения двух вещей:
1. Добавление элементов в StringList 2. Получение индекса сторки из StringList Вообщем я впал в ужас..
Кому лень запускать привожу результаты работы:
Чуть про вопрос незабыл=) возможно ли ускорить этот процесс? т.к. у меня в списке (запланировано) до 300 тыс. строк. ![]() Да, индексирование я использую для определения наличия данной строки в списке, (все строки уникальны) может есть более оптимальные варианты? -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
||||
|
|||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
Alex анд что?
-------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
Alex |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
Добавлено @ 12:39
Модуль дя более точного засекания времени Добавлено @ 12:41
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
||||||
|
|||||||
z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
Слона-то я и не заметил=)
Alex, очередное спасибо! ЗЫ, да мне точно и ненадо было, так просто сравнить разницу.. Это сообщение отредактировал(а) z-END - 23.1.2005, 12:43 -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
Причину знаешь почему так произошло?
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
Петрович |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Ну, тут как всегда. Очевидное решение не всегда самое эффективное. Давай, несколько модифицироуем твой приммер:
До модификации:
После:
А еще: 1. Application.ProcessMessages в консольных приложениях - это лишнее. 2. Нужно выносить действия инвариантные к циклу, за его пределы. Но это ты уже сам ![]() -------------------- Все знать невозможно, но хочется |
||||||
|
|||||||
z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
Alex чесно говоря несовсем=)
так-что c радостью готов услышать! Петрович ProccessMessages я использовал только для того чтобы приблизить результаты к другой софтине, которая совершенно не консольная=) (кстати в ней то-же код работает намного медленней) а вот про второй пункт я несовсем понял ![]() ЗЫ а вот результат сортировонного списка:
-------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
1 Ссылка на модуль для замера времени исполнения теперь http://vingrad.ru/DELPHI-SRC-002244
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
Петрович |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Ну да, в отсортированном конечно поиск быстрее. Всетаки используется алгоритм QuickSearch ![]()
Я имел ввиду что преобразование IntToStr тоже занимает чувствительнгое время, хотя совершено не имеет отношения к исследуемой функции. Если его вынести за пределы цикла, например подготовив зарание массив испкомых строк, то работать будет несколько быстрее. Но все равно, лвиную долю времени занимает конечно поиск. -------------------- Все знать невозможно, но хочется |
||||
|
|||||
Alex |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 80 Всего: 162 |
Дело в том, что если посмотреть на реализацию метода IndexOf, то можно увидеть, что в нем по-разному происходит поиск в отсортированном и не отсортированном списке
Если список, не отсортированный, то дергается базовый метод типа TStrings
Он не эффективен по той причине, что постоянно идет перебор всех элементов списка. Если же сортировка включена, то выборку можно осуществить гораздо быстрее по методу деления по полам. Это когда весь ОТСОРТИРОВАННЫЙ массив бьется на 2 и определяется, к какой части относится элемент, который ищут. Дальше эту уже часть опять делят на 2 и так далее пока не найдут нужный элемент.
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |