IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
Zhur
- Сообщения: 125
- Зарегистрирован: 01 мар 2006, 18:17
Сообщение
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
Нет... тут, в общем-то третий случай - периодический импорт...
А вот DS попал таки пальцем... в точку... Скорее всего сделаю через параметры.