![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TIBQuery и Out of Memory (help) [D6, IB6.x]
A_Gura © (2002-12-16 06:27:00)Люди!!!! В чем проблема???
Использую IBX TIBQuery. Из файла читаю запись, проверяю ее наличие в БД (запрос на выборку), если запись отсутствует - вставляю ее в БД (insert).
Записей много!!!
Короче при выполнении запроса на выборку большое кол-во раз (более 2000) вываливается ошибка Out of Memory. Сразу добавлю: я сам память не выделяю (т.е. это не моя ошибка)...
A_Gura (2002-12-25 06:22:00) [1]При динамическом создании и уничтожении TIBQuery, все работает... Ура!
Johnmen (2002-12-17 15:29:00) [2]>Max Zyuzin © (17.12.02 15:17)
Нет. Это автору про первую тр-ю... :-)
>A_Gura (17.12.02 15:07)
Попробуй...Но, думаю, не поможет...
Max Zyuzin (2002-12-17 15:24:00) [3]>A_Gura (17.12.02 15:07)
И еще в догонку... попробуй делать не CommitRetaining а просто Commit может тут какие "хвосты" остаются... (и соответственно Rollback)
Max Zyuzin (2002-12-17 15:17:00) [4]>A_Gura (17.12.02 15:07)
Думаю, что так будет еще хуже...
>Johnmen © (17.12.02 15:02)
Если это мне :) то просто мне любезно прислали кусок кода :)) там транзакции завершаются после пары сотен вставок открываний :)
Я понимаю, что это не так уж и много, но мало ли что...
A_Gura (2002-12-17 15:07:00) [5]Попробую... Но если это утечка памяти у TIBQuery, то можно попробовть его динамический создавать и по завершении транзакции уничтожать. Мне кажется должно помочь.
Johnmen (2002-12-17 15:02:00) [6]1)StartTransaction
2)Получить НД
3)Поработать с НД
4)Закрыть НД
5)Commit
И что ?
Max Zyuzin (2002-12-17 15:00:00) [7]Что бы было меньше телодвижений в рамках транзакции...
A_Gura (2002-12-17 14:59:00) [8]Не пойму зачем. Чего ты от этого эксперимента ожидаешь?
Max Zyuzin (2002-12-17 14:54:00) [9]Попробуй ради эксперимента делать выборки в другой транзакции... И после выборок RollBack делать ей...
A_Gura (2002-12-17 14:51:00) [10]Дык прикол в том, что глюк вываливается во время запросов на выборку, а не вставки. Вставка работает превосходно.
Johnmen (2002-12-17 14:44:00) [11]Проведи эксперимент :
1) В рамках одной транзакции получаешь НД, используя TIBDataSet
2) В рамках других делаешь вставки, причем с каждый раз с подтверждением тр-ии...
Каков результат ?
A_Gura (2002-12-17 14:29:00) [12]Один человек говорит, что заметил эту ошибку почти 2 года назад... Ну и как теперь с ней бороться... Надо очень срочно... Работа стоит.
A_Gura (2002-12-16 11:03:00) [13]Установлена версия IBX 6.04... В 6.05 вроде только поддержка ib7 добавлена.
Johnmen (2002-12-16 10:55:00) [14]Похоже проблема в утечке памяти при использовании TIBQuery.
Хотя лично я не сталкивался, т.к. не пользую TIBQuery для получения НД. Попробуй проапдейтить IBX. Возможно багов будет меньше.
A_Gura (2002-12-16 10:32:00) [15]Сюда не входит :)
Всегда пожалуйста ;)
Max Zyuzin (2002-12-16 10:31:00) [16]>A_Gura (16.12.02 10:01)
Спасибо, конечно... я имел ввиду сюда в форум :)
A_Gura (2002-12-16 10:06:00) [17]Насчет ХП. Я полностью согласен что будет быстрее. Но, во-первых, такая процедура (т.е. код) универсальна. Во-вторых, это уже дело принципа, хочу понять в чем проблема.
A_Gura (2002-12-16 10:01:00) [18]Мылом ушло
Sergey Masloff (2002-12-16 09:43:00) [19]A_Gura
Ну я чего-то не понимаю. Ну у меня тоже есть загрузка из XML. Непонятно почему не подходят ХП? И несколько тысяч-это совсем немного записей.
ХП может вставлять и в несколько таблиц, да и непонятно в чем проблема написать один раз несколько ХП?
Зато смотри: с ХП тебе не нужно проверять наличие записи в таблице. Просто гонишь свой XML до конца, а ХП сама проверяет - есть или нет такая записю. Причем это делает на порядок быстрее чем ты своим динамически сформированным XML.
Кстати, пример немного не в тему. У меня была выгрузка базы в XML средствами клиента на Delphi. Потом я переделал ее на ХП. выгрузка которая шла 3-7 минут стала выполняться мгновенно (я даже не мерял, ну может 2-3 секунды максимум)/
Max Zyuzin (2002-12-16 09:35:00) [20]А код посмотреть можно??