Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2013, 16:50   #1
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 267
По умолчанию TGauge и утечка памяти

Добрый день. Есть вроде бы стандартный код для отображения загрузки процессора на основе adCpuUsage

Код:
uses Gauges; (*в оригинале сам компонент на форму не ставится*)
.....

implementation
{$R *.dfm}
uses adCpuUsage;

procedure TForm2.FormCreate(Sender: TObject);
var
I:integer;
Gauge: TGauge;
begin
 for i:=1 to GetCPUCount-1 do
   begin
     try
       Gauge:=TGauge.Create(Form2);
       Gauge.Name:=Format('Gauge%d',[i]);
         with TGauge(FindComponent(Format('Gauge%d',[i]))) do
           begin
             Parent:=StatusBar;
             Top:=2;
             Width:=100;
             Height:=18;
             Left:=((i-1)*Width);
             MinValue:=0;
             MaxValue:=100;
             ForeColor:=clGreen;
           end;        
     except
       //
     end;
   end;
end;

procedure TForm2.Timer2Timer(Sender: TObject);
var
n:Integer;
CPU   : Integer;
begin
    CollectCPUData;
    for n:=1 to GetCPUCount-1 do
      begin
        TGauge(FindComponent('Gauge'+IntToStr(n))).Progress:=StrToInt(Format('%0.0f%',[GetCPUUsage(n)*100]));
        CPU:=StrToInt(Format('%0.0f%',[GetCPUUsage(n)*100]));
      end;
end;
и все вроде бы работает, но если добавить

Код:
initialization
ReportMemoryLeaksOnShutdown := true;
end.
то становится видна утечка памяти при закрытии формы. видимо дело в Gauge:=TGauge.Create(Form2); и в отсутствии соотвественно деструктора
Вопрос: как правильно при закрытии приложения уничтожить компонент, чтоб не было утечки памяти?
Pcrepair вне форума Ответить с цитированием
Старый 31.05.2013, 17:14   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Gauge объявить, например, в private формы. В OnCreate создание, а в OnClose или OnDestroy формы Gauge.Free
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.05.2013, 17:17   #3
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 267
По умолчанию

ситуация немного изменилась:
если вместо TGauge использовать TChart (а там нет никакого СОЗДАТЬ) все равно та же же самая утечка памяти. похоже что то не так с adCpuUsage.pas
как локализовать код создающий утечку?(на что обратить внимание как на источник потенциальной утечки: TStringList и прочего из этой серии вроде нет ничего) чтоб потом доработать
Pcrepair вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
утечка памяти Кудаив Помощь студентам 1 30.04.2012 18:18
Утечка памяти forivanb Общие вопросы Delphi 4 11.04.2012 15:28
Утечка памяти Juffin Общие вопросы Delphi 3 02.11.2010 12:11
Утечка памяти ZvEr_HaCkEr Свободное общение 13 24.09.2010 19:30
утечка памяти в С++ vengo Общие вопросы C/C++ 9 10.06.2008 21:24