Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TGauge и утечка памяти, TGauge и утечка памяти 
:(
    Опции темы
Pcrepair
Дата 31.5.2013, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



Добрый день. Есть вроде бы стандартный код для отображения загрузки процессора на основе 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); и в отсутствии соотвественно деструктора 
Вопрос: как правильно при закрытии приложения уничтожить компонент, чтоб не было утечки памяти?
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
Beltar
Дата 31.5.2013, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 0
Всего: 7



Ну вызови в except FreeAndNil. А вообще что за ужас ты делаешь? У тебя Gauge выйдет из зоны видимости после FormCreate. Если никак сделать контрол визуалньо, то хотя бы в private формы его объяви. А так, похоже, что работает лишь потому, что чего-то там в памяти еще не затерлось. Т. е. по чистой случайности.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Pcrepair
Дата 31.5.2013, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



Цитата(Beltar @ 31.5.2013,  16:15)
А так, похоже, что работает лишь потому, что чего-то там в памяти еще не затерлось. Т. е. по чистой случайности.

мопед не мой

ситуация немного изменилась:
если вместо TGauge использовать TChart (а там нет никакого СОЗДАТЬ) все равно та же же самая утечка памяти. похоже что то не так с adCpuUsage.pas
как локализовать код создающий утечку?(на что обратить внимание как на источник потенциальной утечки: TStringList и прочего из этой серии вроде нет ничего) чтоб потом доработать
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
Illusion Dolphin
Дата 31.5.2013, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 5
Всего: 63



Строка
Код

Gauge:=TGauge.Create(Form2);

говорит, что Gauge будет освобождать форма Form2. Расскажи лучше что текёт судя по репорту. А ещё можно включить full debug режам, и тогда будет видно в какой момент создаётся то, что текёт.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Pcrepair
Дата 31.5.2013, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



вот что пишет делфи(перевожу):

неожиданная утечка памяти приключилась
неожиданные маленькие блоки утечки есть:
21 - 28 байт; TresourcesStream x 1, UnKnown x 1
                         OK

но вообще гавуч тут похоже не причем, если упростить:

Код

implementation
{$R *.dfm}
uses adCpuUsage;
 
procedure TForm2.Timer1Timer(Sender: TObject);
var i: Integer;
begin
    CollectCPUData;                  (*ПОЛУЧИТЬ ДАННЫЕ ДЛЯ ВСЕХ ПРОЦЕССОРОВ*)
    for i:=0 to GetCPUCount-1 do     (*показать данные для каждого процессора*)
    Memo1.Lines[i]:=Format('CPU #%d - %5.2f%%',[i,GetCPUUsage(i)*100]);
end;
 
initialization
ReportMemoryLeaksOnShutdown := true;
 
end.

утечка памяти все равно есть. как узнать где в модуле adCpuUsage утечка?
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
Illusion Dolphin
Дата 31.5.2013, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 5
Всего: 63





--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.