![]() |
|
|
![]()
|
|
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Я, конечно, понимаю, что телепатов среди вас нет, но может кто-нибудь сможет помочь.
Суть проблемы: Имеется процедура, которая обращается к базе данных Paradox через BDE. Она делает выборку, затем считывает результат в динамический массив. Действия с БД, которые производит данная процедура: -выборка данных (Select) из небольших таблиц (~500 записей); -создание временных таблиц через API (DBIMakePermanent), так как Paradox не поддерживает представления. Из динамических типов данных используется только динамические массивы. При последующих обращениях к ней происходит постоянное увеличение времени выполнения (хотя эта процедура выполняет одни и те же действия). Я пытался изменить настройки BDE (может кто-нибудь посоветовать оптимальные настройки), но только хуже стало, может, не хватает кэш-памяти. В принципе могу привести код участка процедуры, но не думаю, что это поможет --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| SPrograMMer |
|
||||
![]() Спамер :) ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 5.11.2004 Где: Краснодар Репутация: 1 Всего: 6 |
УГУ! А где ж твои временные таблицы. на диск сохраняются?
Желательно. -------------------- животное = зверь законченный гентушник |
||||
|
|||||
| fess |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Они сохраняются в папке с самой базой данных. Участок кода (из него вырезана, по моему мнению, ненужная часть):
Это сообщение отредактировал(а) fess - 15.4.2005, 20:24 --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
||||
|
|||||
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Ну, раз ни у кого нет никаких предложений, попробую сформулировать вопрос по-другому.
Так как при перезапуске приложения скорость выполнения этой процедуры опять становится минимальной (т.е. при первом вызове скорость выполнения нормальная), то возникает вопрос: Что происходит с БД при закрытии приложения и как выполнить эти действия во время работы приложения? --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| bursa |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 25.2.2005 Где: Липецк Репутация: 1 Всего: 1 |
Увеличивай длину сразу на количество записей. Кстати, может ускорить, если перед всей операцией установить длину массива в ноль
|
||||
|
|||||
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Это здесь совершенно не причём. Возможно, я не так объяснил или ты не так понял. Я засекаю только то время, котрое требуется на выполнения запроса (и оно увеличивается), т.е. я не смотрю, сколько времени тратится на создание динамического массива и на заполнеия его данными. --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 14 Всего: 207 |
Кстати парадокс поддерживуает представления... Создай на диске файл с расширением sql и содержимым в ввиде SQL запроса. Теперь можешь к этому файлу обращаться как к таблице...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Я эту фишку знаю, но, к сожалению, каждый разогда ты используешь этот SQL-запрос, он заново вычисляется --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| Dr.No_xXx |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 215 Регистрация: 24.2.2005 Репутация: нет Всего: нет |
Если я правильно понял то ты вызываешь процедуру несколько раз в 1 программе.А по сему где твое закрытие? |
|||
|
||||
| fess |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Да, можно и так сказать. На самом деле эта процедура вызывается 5-10 раз из другой процедуры, которая несколько раз вызывается при нажатии на кнопку
Закрытие чего? Если запроса, то он закрывается непосредственно перед выполненем следующего запроса, т.к. я использую этот TQuery как временный в различных местах программы (чтобы каждый раз не создавать и уничтожать его динамически), так что он довольно часто открывается и закрывается. Это сообщение отредактировал(а) fess - 2.5.2005, 18:53 --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
||||
|
|||||
| Guest |
|
|||
|
Unregistered |
Так что же у вас увеличивается на самом деле - MegaTik или (GetTickCount - t) ? |
|||
|
||||
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
MegaTik. Так как процедура выполняется несколько раз, то в переменную MegaTik записывается суммарное время, которое требуется на многократное выполнение этого запроса в процедуре. --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| FireFly |
|
|||
|
Unregistered |
Ясно.
Тогда слtдующий вопрос:
А попробуй выполнять этот запрос некоторое количество раз на одном и том же наборе данных. Как будет вести себя - MegaTik ? |
|||
|
||||
| fess |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 17.2.2005 Где: г. Мурманск, Росс ия Репутация: нет Всего: 3 |
Попробывал не изменять таблицу Sij
Практически никаой разницы (т.е. всё равно, что изменяем, что не изменяем Sij) --------------------
Компьютер не подчиняется законам физики. Только в нём глюки возникают из ничего, файлы исчезают в никуда, а объём измеряется в метрах и называется весом. |
|||
|
||||
| FireFly |
|
|||
|
Unregistered |
Мда. Неонятно. Хотя я сам никогда не измерял время выполнения своих запросов
от раза к разу. Ну тогда...дурацкий вопрос на вский случай, а какого типа у ваше t и Megatick? И еще. А если написать и проверить, скажем, такое? listbox1.visible:=false; for i:=1 to 1000 do begin StomackModule.Query1.Close; StomackModule.Query1.sql.Clear; {Добаление запроса в TQuerry} StomackModule.Query1.sql.Add(Format(Template_S_B_SQL, [BiomTableName, VariantId, YearId, 'and S.Age=F.' + Param])) t := GetTickCount;//Замечаем время StomackModule.Query1.Open; listbox1.items.add(inttostr(GetTickCount - t)); end; listbox1.visible:=true; Можно еще попробовать вместо Query1.Open - Query1.Active:=true; |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |