Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Утечка памяти в Delphi 7

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
BorZoFF



Зарегистрирован: 10.01.2006
Сообщения: 2

СообщениеДобавлено: Вт Янв 10 2006 17:22    Заголовок сообщения: Утечка памяти в Delphi 7 Ответить с цитатой

Помогите пожалуйста
При отработке такого кода происходит утечка памяти.
Вызов идет в цикле.
Да и это происходит и с TQuery и с TADOQuery, аналогично
постепенно память используемая прогой растет до безобразия.

Да можно было бы создать один экземпляр класса
но эта функция вызывается из DLL, в этом есть необходимость,
поэтому экземпляр класса прходится создавать динамически.

(для примера)

function SaveLog(FileName,Event:string):Integer;
var Query:TQuery;
Count:Real;
begin
try
Query:=TQuery.Create(nil);

if not FileExists(FileName) then begin
Query.SQL.Text:= ' Create TABLE "'
+FileName+'"'+
' ('+
'NUMBER_ NUMERIC,'+
'DATE_ DATE, '+
'TIME_ CHAR(10), '+
'EVENT_ CHAR(254) '+
' )' ;
Query.ExecSQL; end;


Query.SQL.Text:='Select Number_ as Number from "'+FileName+'"';
Query.Active:=True;

if Query.RecordCount=0 then begin Count:=1; end else
begin
Query.Active:=False;
Query.SQL.Text:='Select MAX(Number_) as Result
from "'+FileName+'"';
Query.Active:=True;

Count:=Query.FieldByName('Result').AsFloat;
Count:=Count+1;
Query.Active:=False; end;

Query.SQL.Text:= 'INSERT INTO "'+FileName+'"'+
' ( NUMBER_,DATE_,TIME_, EVENT_) '+
'VALUES ( :NUMBER,:DATE,:TIME, :EVENT)';

Query.ParamByName('NUMBER').AsFloat := Count;
Query.ParamByName('DATE' ).AsDate := Date;
Query.ParamByName('TIME' ).AsString := TimeToStr(Time);
Query.ParamByName('EVENT').AsString := Event;
Query.ExecSQL;

Query.Active:=False;
Query.Free;
Result:=0;

except

Query.Active:=False;
Query.Free;
Result:=1;
end;

end;
[/b]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...