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

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

Как сделать прогу с IBX пошустрее? [D5, IB6.x, ]


Fareader ©   (2002-01-03 16:11:00) 

ПРивет всем. Попробовал перевести прогу из под BDE-шных компонентов на IBX - думал будет быстрее бегать, но скорость упала. В чем прикол?


Alexandr   (2002-01-09 07:00:00) [1]

х.з. этот IBX


Fareader   (2002-01-08 14:15:00) [2]

Да, через yar_query запустил изменения - пошло быстрее. Только чего фильтр через OnFilterRecord иногда протормаживает, он чего заново запрос читает и отбирает то чего в фильтре записано?


Alexandr   (2002-01-08 14:01:00) [3]

и то и другое.
Да ладно , если рехнешся, то не переводи.
ну и как быстродействие?
разобрался?


Fareader   (2002-01-08 13:54:00) [4]

Сэкономлю что, память или быстрее будет?
Я реханусь все с IBX на FIBC переводить.


Alexandr   (2002-01-08 12:22:00) [5]

4.5.1 уже как-то работает.
см. на fibplus.com.ua
у них там даже примеры есть...


Romkin   (2002-01-08 12:18:00) [6]

А FibPlus работает с MIDAS? или по-прежнему нет?


Alexandr   (2002-01-08 12:01:00) [7]

угу
или 4.5.1


Павел2   (2002-01-08 11:36:00) [8]

а еще можешь взять FIBPlus версии 4.4.12 или старше и сделать FetchAll в них и в IBX - сравнишь время и обьем отожранной памяти - еще ~20-30% сэкономишь


Alexandr   (2002-01-08 10:39:00) [9]

такого не может быть.
если только дело не в FetchAll
проверь в IBX и в BDE должно быть одинаково.
или уж и там и там сделай лишний раз.
Лишний раз тормозить уже совсем не будет, а сделан FetchAll будет точно.
пропиши после открытия
DataSet.Open;
DataSet.FetchAll;


Fareader   (2002-01-08 10:24:00) [10]

Ладно все это чудесно, но почему один и тот же запрос на выборку в IBX исполняется намного дольше, чем в BDE?

select nak.num_nak, nak.kod_pl, nak.kod_gr, nak.num_yar, nak.date_smena, nak.date_in, nak.date_out, nak.vozvrat, nak.state_nak, nak.all_sht, nak.cls_smen, nak.cls_month, nak.num_nak_u,
yar.graf, yar.ezd, yar.drive_y, yar.id, yar.kod_cx,
yar.date_print as yar_print
from (nak left join yar on nak.num_yar=yar.id)
where
nak.state_nak between :b_state and :e_state and nak.state_nak<>0
or (nak.B_Smena_F= :b_period and nak.E_Smena_F= :e_period
and nak.state_nak between :b_fakt and :e_fakt )

order by nak.num_yar

Да, транзакции итак две - пишущая и читающая.


Alexandr   (2002-01-08 08:59:00) [11]

1)yar_query в IBX ты переоткрываешь, да еще и FetchAll, а в BDE нет.
2) в IBX ты создаешь дапрос на изменение, и запускаешь его каждый раз вручную, в результате чего в IBX в yar_query у тебя данные сами не меняются, поэтому тебе его приходится переоткрывать
а в BDE ты используешь cached Updates, поэтому у тебя изменения сразу в yar_query появляются и переотрытие делать ненадо.
в общих чертах так.
да, и еще в IBX заведи две транзакции- читающую и пишущую


Fareader   (2002-01-04 17:33:00) [12]

Ну как есть идеи?


Fareader   (2002-01-04 11:57:00) [13]

Это с IBX
if nak_query.state=dsedit then nak_query.post;

if not write_trans.intransaction then write_trans.starttransaction;

Temp_query.close;
Temp_Query.sql.clear;
Temp_Query.sql.add("update nak set state_nak= :state_nak,");
Temp_Query.sql.add("vozvrat= :vozvrat");
Temp_Query.sql.add("where num_nak= :num_nak");
Temp_Query.parambyname("state_nak").asinteger:=3;
Temp_Query.parambyname("num_nak").asinteger:=yar_query.fieldbyname("num_nak").asinteger;
Temp_Query.parambyname("vozvrat").asinteger:=strtoint(label13.caption);
Temp_Query.execsql;

try
if nak_query.updatespending then
if not write_trans.intransaction then write_trans.starttransaction;

if nak_query.updatespending then begin
nak_query.ApplyUpdates;
sum_nak_query.CancelUpdates;
end;

if write_trans.intransaction then write_trans.commit;

ref:=true;

except
if write_trans.intransaction then write_trans.rollback;
nak_query.cancelupdates;
ref:=false;
messagedlg("


Alexandr   (2002-01-04 11:38:00) [14]

как это?
здесь бы привел как там и как там.

Чудес не бывает.


Fareader   (2002-01-04 10:57:00) [15]

Конкретнее: операции изменения записей и обновление IBQuery проходят гораздо медленее, чем с TQuery.


evgeg   (2002-01-03 22:26:00) [16]

А конкретнее?


Наверх

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