Долго работает IBQuery

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Долго работает IBQuery

Сообщение Zhur » 03 май 2006, 16:22

Два примера:
Первый:
while ... do begin
IBQuery.SQL.Add(...);
end;
Второй:
while ... do begin
StringListL.Add(...);
end;
Первый пример (с IBQuery.SQL... впрочем это касается и IBSQL) почему-то очень долго работает. Транзакция, на которую он ссылается неактивна, правда активен IBDatabase.
Может объясните, почему так долго работает? Цикл-то ведь у меня аж пол миллиона раз повторяется.

Dynamic
Сообщения: 22
Зарегистрирован: 04 май 2006, 09:30

Сообщение Dynamic » 04 май 2006, 09:56

думается, что тормоза не в ADD(), а где-то рядом.....

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 04 май 2006, 16:10

Dynamic писал(а):думается, что тормоза не в ADD(), а где-то рядом.....
А причем тут ADO вообще?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 04 май 2006, 16:28

При чем тут ABO, LBO, MSO? буквы читай внимательно, да? :)

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 04 май 2006, 16:44

kdv писал(а):При чем тут ABO, LBO, MSO? буквы читай внимательно, да? :)
Извиняюсь... и вправду эт я загнул.
Так почему же так долго работает... Может IBQuery.SQL какие-нибудь свои дополнительные времязатратные штучки делает?
Главное, если поставить StringList, то цикл в 150000 раз выполняется за 3 сек, а с IBQuery.SQL за минуту только 1 процент проходит.

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 04 май 2006, 16:56

Можно было бы, конечно, заполнить StringList, а потом перенести данные в IBQuery.SQL... Но в идеале, хотелось бы еще в цикле каждый раз стартовать транзакцию и коммит делать.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 04 май 2006, 18:08

Но в идеале, хотелось бы еще в цикле каждый раз стартовать транзакцию и коммит делать.
то есть, хочется загнуть сервер?

www.ibase.ru/devinfo/impexp.htm

DS
Сообщения: 41
Зарегистрирован: 17 фев 2005, 16:54

Сообщение DS » 04 май 2006, 21:15

Цикл-то ведь у меня аж пол миллиона раз повторяется.
Чет я не въеду, а нафик тебе такой SQL сдался...
Что ты такое грандиозное творишь?
Мож попаду пальцем в небо... тебе запрос с параметрами не поможет?

Dynamic
Сообщения: 22
Зарегистрирован: 04 май 2006, 09:30

Сообщение Dynamic » 05 май 2006, 06:53

Zhur писал(а):
kdv писал(а):При чем тут ABO, LBO, MSO? буквы читай внимательно, да? :)
Может IBQuery.SQL какие-нибудь свои дополнительные времязатратные штучки делает?.
вроде ничего больше не делается, свойство SQL напрямую отображается на внутр.поле FSQL: TStrings;

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 05 май 2006, 08:09

Там, правда, есть еще обработчик FSQL.OnChange. Довольно длинный и тупой. Ох не зря я советую не пользоваться TIBQuery и TIBTable...
Но в любом случае запрос в 150тыс.строк не пройдет даже теоретически. Предельный размер запроса в IB/FB 64к.

Dynamic
Сообщения: 22
Зарегистрирован: 04 май 2006, 09:30

Сообщение Dynamic » 05 май 2006, 08:42

Dimitry Sibiryakov писал(а): Но в любом случае запрос в 150тыс.строк не пройдет даже теоретически. Предельный размер запроса в IB/FB 64к.
про запрос никто и не говорил, кажись

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 05 май 2006, 13:36

kdv писал(а): то есть, хочется загнуть сервер?
www.ibase.ru/devinfo/impexp.htm
Нет... тут, в общем-то третий случай - периодический импорт...
А вот DS попал таки пальцем... в точку... Скорее всего сделаю через параметры.

Ответить