Опять утечка памяти, блин

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

serg_iv
постоялец
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Опять утечка памяти, блин

Сообщение serg_iv »

Опять нашел утечку памяти- при перересовке формы form.Repaint.
В компонентах
вкладка Standart:
- Label
- Panel

вкладка Additional
- speedButton
- labeledEdit
- Splitter
- StringGrid
- DrawGrid
- ColorListBox

На других вкладках пока не проверял.
Кто может, прошу проверить:
на форму ложим таймер, Interval := 1 (быстрее видно заполнение)
внутри

Код: Выделить всё

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Repaint;
end;

после этого ложим на форму по очереди указаные компоненты и наблюдаем рост потребляемой памяти.

Уф!..
Че делать то?

PS: GTK2, на других не проверял.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

serg_iv писал(а):Че делать то?

в трекер идти
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Проверил на TPanel - никакой утечки памяти нет!!! Блее полный код можешь выложить?

Добавлено спустя 201 секунду:
Проверил с TLabel - результат отрицательный! Все нормально!

Добавлено спустя 109 секунд:
Вот мой код для проверки:

Код: Выделить всё

unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  ifor: integer;
begin
  for ifor:= 0 to 10000 do
    begin
      Repaint;
      sleep(1);
    end;
end;

initialization
  {$I unit1.lrs}

end.
serg_iv
постоялец
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение serg_iv »

Virtux, для очистки совести переписал код буква в букву, размер увеличивается с 3,6 Мб до 7,3. Смотрю в гномовском системном мониторе.
Может я не так смотрю? Иль не на то?
Версия Лазаря 0.9.25 20080528 ubuntu 8.04
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Извиняюсь. Смотрел по общему использованию памяти - вроде все в норме, но сам процесс дейсно показывает увеличение используемой памяти. Такая же проблема и при Refresh.
serg_iv
постоялец
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение serg_iv »

Ну, кто идет в трекер?
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

У меня с англицким туговато :)
serg_iv
постоялец
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение serg_iv »

Запостил на английский форум, надеюсь они меня поняли.
Я сам себя там понял с большим трудом. :oops:

Добавлено спустя 14 часов 42 минуты 36 секунд:
Смотрел трекер, не нашел такого.
Может кто все таки запостит? Я честно пытался, но только не получается почему то.
То-ли мозгов не хватает, то-ли ... на этом мысль останавливается.
На английском форуме меня ваще вряд ли поняли.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Либо ни у кого нет с этим проблем, либо никому это не нуна
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

вечером проверю и запостю.
serg_iv
постоялец
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение serg_iv »

вечером проверю и запостю.

Спасиб.
Аватара пользователя
NXP
постоялец
Сообщения: 187
Зарегистрирован: 02.01.2008 15:11:56
Откуда: Воронеж
Контактная информация:

Сообщение NXP »

Я похоже, тоже пострадал от утечек памяти. (под Win32)
Имею TreeView1.
Создаю там ноды и цепляю их друг к другу как надо. К каждому ноду прицелена Data (указатель на запись pNode_Rec)

Код: Выделить всё

  Node_Rec = packed record
    Node_ID:      integer;
    Node_Mode:    Byte;
  end;
  pNode_Rec = ^Node_Rec;


вот так, к примеру:

Код: Выделить всё

 
var  NodeData: pNode_Rec;

new(NodeData);
NodeData^.Node_ID   := 5;
TreeView1.Items.AddChildObject(RootNode, 'Новый', NodeData);


В процесс работы надо удалять ноды:
TreeView1.Selected.Delete;

При удалении вызывается «чистилка» памяти из под записи:

Код: Выделить всё

procedure TRoot.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
var NodeData: pNode_Rec;
begin
  if (Node = nil) then exit;
  if (Node.Data = nil) then exit;
  NodeData:= Node.Data;
  FreeMem(NodeData);
  Node.Data:= nil;
  Node.Delete;
end;   

Однако память не очищается :x С каждой перезагрузкой дерева из 10-20 элементов пожирается около 50 КБ памяти. Пробовал очищать NodeData перед выполнением TreeView1.Selected.Delete; но результат тот же (.
Что с ним можно поделать :?:
serg_iv
постоялец
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение serg_iv »

Тож в багтрекер идти. Тока я его ни асилил.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

как-то плохо вы искали есть такое 9259 так как у него уже стоит важность большая заводить другой думаю не стоит

Добавлено спустя 2 минуты 46 секунд:
NXP писал(а):Что с ним можно поделать

определить утечку до одного компонента, а так не понятно что у тебя там TreeView виноват или сам где-то косячишь с NodeData
Аватара пользователя
Сергей Смирнов
энтузиаст
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва
Контактная информация:

Сообщение Сергей Смирнов »

Attid писал(а):...а так не понятно что у тебя там TreeView виноват или сам где-то косячишь с NodeData
Там NodeData на 50кБ при 20-ти узлах явно не тянет :)
Ответить