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

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

Утечки памяти в TIBQuery :( [D5, IB6.x]


BSD ©   (2002-11-09 16:59:00) 

Добрый день!
Заношу данные в 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. Есть ли какие нибудь мнения?


Dr_Mike   (2002-11-20 21:12:00) [1]

Проблема как раз в сервере Interbase и CommitRetaining - насколько я помню потери памяти при КоммитРитэйнинг - это неисправимый баг версии 6.0.1 (или какой-то такой) -
Так что обнови Интербейс!


BSD   (2002-11-11 14:50:00) [2]

> Romkin

А что именно ставить, я чото не нашел?


Max Zyuzin   (2002-11-10 10:53:00) [3]

Все это весьма странно. У меня прога тоже рабоатет с базами целыми неделями без перезапусков и столько никогда не набирает! Может все дело вовсе не в InterBase? Посмотри свой код внимательно может что где объявляешь и забываешь удалять?


Romkin   (2002-11-10 10:49:00) [4]

Поставь обновление IBX, на родном работаешь?
www.ibase.ru


BSD   (2002-11-09 18:26:00) [5]

Посмотрите файл IBSQL.PAS строка 1033:

if (FXSQLVAR^.sqltype and (not 1) = SQL_BLOB) then
LoadFromStream(TStringStream.Create(Value))

StringStream создали, а его удаления нигде нет.
Мастера это что ошибка в VCL или просто я глючю?


BSD   (2002-11-09 17:55:00) [6]

Поставил Commit - те же проблемы!
Незнаю даже что делать. Вроде бы всего 12 байт, а за двое суток прога 20 мег проср@ла :(


BSD   (2002-11-09 17:51:00) [7]

Все делаю точно так, только вместо Commit - CommitRetaining,
может из-за этого?


KDS   (2002-11-09 17:50:00) [8]

Дело скорее всего не в этом участке кода. Все иду домой


KDS   (2002-11-09 17:45:00) [9]

все правильно, но где транзакции?
Хорошо было-бы подготовку делать и ошибки обрабатывать
а так все правильно
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;


BSD   (2002-11-09 17:23:00) [10]

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:19:00) [11]

А нука напиши Делфийский код. Т.е. как ты выполняешь эту вставку
программно? Иначе мало информации для анализа проблемы
Какие компоненты доступа к данным IBObject?


Наверх

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