Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оптимизация или что быстрее стринглист или проход по базе


IGORYOK ©   (2004-03-04 17:30:00) 

Передо мной предстала задача оптимизации. Я долго раздумывал над различными схемами, но вопрос упирался в тот простой момент что Дельфийские классы не являются столь уж скоростными, и наоборот тяжело захламляют память, вопрос в следующем - что быстрее проход Nextами по базе или загрузка в начале довольно солидного txt файла и поиск по нему(Хочу сказать что думаю о частичной загрузке списка). И ещё одно что быстрее идя по записи сразу брать из всех колонок или загружать по колонкам отдельно.


KA_   (2004-03-06 15:52:00) [1]

>Вольный Стрелок   (05.03.04 15:15) [14]

Ну зачем же так...
Все три приема имеют место быть и даже используются разработчиками. Просто не так часто, как стандартные :)


Вольный Стрелок   (2004-03-05 15:15:00) [2]

сорри за оффтоп, но сегодня, похоже, день извращенцев:
- один хочет БД в ЕХЕ хранить
- второй хочет закачивать на клиента текст и раком его использовать вместо нормальной работы с Dataset
- третий вообще хочет БД без СУБД и соответствующих компонентов сделать

куда катимся?


Stas   (2004-03-05 11:23:00) [3]

Однозначно будет работать быстрее определенный массив.
Но, для начала его нужно залить через ADO.
Если тебе его нужно гонять туда-сюда.
Только зачем тебе это ?


KA_   (2004-03-05 11:17:00) [4]

>IGORYOK   (04.03.04 17:30)

1.
Загрузка куда и для чего?
Если для поиска, то возможны всякие варианты - от использования SQL-запросов до внутренних средств СУБД, т.е. для поиска данных загружать их полностью необязательно (и часто очень вредно).
При использовании TADODataset  скорость работы с данными весьма приличная (в среднем).

2.
>что быстрее проход Nextами по базе или загрузка в начале >довольно солидного txt файла и поиск по нему

Загрузка txt файла будет происходить быстрее. Но поиск по нему неудобен. TDataset предоставляет массу удобных инструментов для навигации и поиска, а TStringList - нет. Допустим такая ситуация: две записи в таблице имеют одинаковое значение в разных полях - и как в TStringList определить к какому полю относится строка? Можно конечно, но придется пробиваться через анальный сфинктер.

>что быстрее проход Nextами по базе
Это для поиска? Поиск можно и нужно осуществлять методом Locate!

>Никто   (05.03.04 10:50) [9]
>1. ADO работает быстро.

А борландовская обертка над recordset'ом к сожалению не так быстро.


sniknik   (2004-03-05 11:02:00) [5]

IGORYOK   (05.03.04 09:46) [7]
> Странно что Вы не поняли. База-Access доступ-через АДО тоесть JET.
до сих пор не понимаю (даже учетом дополнительного пояснения), что с чем сравнивается?

> В базе Access можно сделать макрос который создаст нужный txt
т.е. хочеш предварительно таблицу в текст перегнать а уже текстовый файл в стринглист закачать? вместо одного запроса, бред по моему.
мало того что лишние операции так еще и числовые данные в строки переконвертирует, и времени и памяти больше займет.


Никто   (2004-03-05 10:52:00) [6]

P.S. А зачем бегать по всем записям/столбцам? Может, переформулировать запрос?


Никто   (2004-03-05 10:50:00) [7]

1. ADO работает быстро.

2. repeat
    FieldByName()
    FieldByName()
  until
- быстрее, так как курсор при этом пробегает по БД один раз.

3. Выполнение макроса в Access + загрузка получившегося txt (не упоминая уж о создаваемом при этом временном файле) - явно дольше, чем работа напрямую с ADO.

4. Грубость - не лучший способ получить ответ.


Рамиль   (2004-03-05 09:55:00) [8]

А Вы где нибудь видели, что делается так?!.


IGORYOK   (2004-03-05 09:46:00) [9]

Странно что Вы не поняли. База-Access доступ-через АДО тоесть JET.
Zacho ответивший дважды скажу: Может быть я ошибаюсь но DataSet как я понимаю при каждом вызове Next и тд обращается к COM, не буду описывать всю ситуацию, но COM мне казалось не самое быстрое взаимодействие. А по поводу второго как вы не поймёте:
Делать так:
repeat
FieldByName()
until
repeat
FieldByName()
until
и тд или
repeat
FieldByName()
FieldByName()
until

//--------------------------------------------
Почему я говорю про txt файлы [для непонятливого Desdechado]. В базе Access можно сделать макрос который создаст нужный txt, и потом использовать его - LoadFromFile - что быстрее??? и экономнее - вот какую оценку я от вас хотел услышать.


LaidBack   (2004-03-05 06:05:00) [10]

Зависит от конкретной реализации.
У меня были случаи когда приходилось грузить таблицу в память.
Иногда спасал TRxMemData, иногда брал TList. Но TStringList не очень удобен.


Zacho   (2004-03-04 20:25:00) [11]

А меня сильно смущает "записи сразу брать из всех колонок или загружать по колонкам отдельно" ... Я так и не понял, что автор ветки хотел этим сказать :(


jack128   (2004-03-04 20:19:00) [12]

с учетом выше сказонного меня, к тому же смущает вот эта фраза
> в начале довольно солидного txt файла и поиск по нему


Zacho   (2004-03-04 19:31:00) [13]

В общем, пока ты нормально не опишешь свою задачу, тебе никто нормально не ответит.

ЗЫ: А фразы типа "Дельфийские классы не являются столь уж скоростными" и дальнейшие наводят на какие-то странные мысли. Например, на мысли что автор поста слабо разбирается в механизме работы класса TDataSet (я могу и ошибаться, естественно) , и к тому же не указывает с какой СУБД и какими компонентами доступа он работает.

ЗЗЫ Скоростными относительно чего ???


Desdechado   (2004-03-04 18:50:00) [14]

смотря чего делаешь...
а что, txt - это твоя БД?


Nikolay M.   (2004-03-04 17:31:00) [15]


> Передо мной предстала задача оптимизации.

:)
Оптимизации чего или кого, если не секрет? :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо