Форум: "Базы";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
ВнизУтечки памяти в TIBQuery :( Найти похожие ветки
← →
BSD (2002-11-09 16:59) [0]Добрый день!
Заношу данные в InterBase базу с помощью IBQuery
SQL:
INSERT INTO RECEIVEDDATA
VALUES (:_CNAME, :_DATETIME, :_COMCODE, :_BUFFER,
:_INTERVAL);
Проблема в том, что происходят утечки памяти (по 12 байт на каждый ExecSQL). Проверял с помощью MemChek.pas
Выдает вот что:
Leak #0 Instance of TStringStream
Size: 12
19 Occurences
call stack - 0 : Routine @Ibquery@TIBQuery@SetParams Find error: 0047CF65
call stack - 1 : Routine @Ibquery@TIBQuery@ExecSQL Find error: 0047CE15
call stack - 2 : Module mythreads.pas Routine @Mythreads@TSaveThread@Execute Line 1276 Find error: 004A43A1
call stack - 3 : Routine @Classes@ThreadProc Find error: 00418CF3
call stack - 4 : Routine @System@ThreadWrapper Find error: 00403D4E
call stack - 5 : (no debug info) Find error: 77E802E9
call stack - 6 : (no debug info) Find error: FFFFFFFC
Вот такая фигня. В чем может быть дело?
Судя по логу не удаляется TStringStream. Есть ли какие нибудь мнения?
← →
KDS (2002-11-09 17:19) [1]А нука напиши Делфийский код. Т.е. как ты выполняешь эту вставку
программно? Иначе мало информации для анализа проблемы
Какие компоненты доступа к данным IBObject?
← →
BSD (2002-11-09 17:23) [2]InsertData:TIBQuery;
. . .
InsertData.Close;
InsertData.ParamByName("_CNAME").AsString:=Counters[SR1.Counter].CName;
InsertData.ParamByName("_DATETIME").AsDateTime:=SR1.When;
InsertData.ParamByName("_COMCODE").AsSmallInt:=CommTabs[GetCommandNumber(SR1.Command)].Code;
InsertData.ParamByName("_INTERVAL").AsSmallInt:=SR1.Interval;
InsertData.ParamByName("_BUFFER").AsString:=s1;
InsertData.ExecSQL;
← →
KDS (2002-11-09 17:45) [3]все правильно, но где транзакции?
Хорошо было-бы подготовку делать и ошибки обрабатывать
а так все правильно
InsertData.Close;
InsertData.Unprepare;
Try
InsertData.ParamByName("_CNAME").AsString:=Counters[SR1.Counter].CName;
InsertData.ParamByName("_DATETIME").AsDateTime:=SR1.When;
InsertData.ParamByName("_COMCODE").AsSmallInt:=CommTabs[GetCommandNumber(SR1.Command)].Code;
InsertData.ParamByName("_INTERVAL").AsSmallInt:=SR1.Interval;
InsertData.ParamByName("_BUFFER").AsString:=s1;
InsertData.Prepare;
InsertData.ExecSQL;
Транзакция.Commit;
except
Транзакция.Rollback
end;
← →
KDS (2002-11-09 17:50) [4]Дело скорее всего не в этом участке кода. Все иду домой
← →
BSD (2002-11-09 17:51) [5]Все делаю точно так, только вместо Commit - CommitRetaining,
может из-за этого?
← →
BSD (2002-11-09 17:55) [6]Поставил Commit - те же проблемы!
Незнаю даже что делать. Вроде бы всего 12 байт, а за двое суток прога 20 мег проср@ла :(
← →
BSD (2002-11-09 18:26) [7]Посмотрите файл IBSQL.PAS строка 1033:
if (FXSQLVAR^.sqltype and (not 1) = SQL_BLOB) then
LoadFromStream(TStringStream.Create(Value))
StringStream создали, а его удаления нигде нет.
Мастера это что ошибка в VCL или просто я глючю?
← →
Romkin (2002-11-10 10:49) [8]Поставь обновление IBX, на родном работаешь?
www.ibase.ru
← →
Max Zyuzin (2002-11-10 10:53) [9]Все это весьма странно. У меня прога тоже рабоатет с базами целыми неделями без перезапусков и столько никогда не набирает! Может все дело вовсе не в InterBase? Посмотри свой код внимательно может что где объявляешь и забываешь удалять?
← →
BSD (2002-11-11 14:50) [10]> Romkin
А что именно ставить, я чото не нашел?
← →
Dr_Mike (2002-11-20 21:12) [11]Проблема как раз в сервере Interbase и CommitRetaining - насколько я помню потери памяти при КоммитРитэйнинг - это неисправимый баг версии 6.0.1 (или какой-то такой) -
Так что обнови Интербейс!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.015 c