powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TArray<TBitmap> чистка памяти
12 сообщений из 12, страница 1 из 1
TArray<TBitmap> чистка памяти
    #40072250
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть класс

Код: pascal
1.
2.
3.
4.
5.
6.
7.
TMyClass = class
 imgs: TArray<TBitmap>;
 ...
end;

var
 mc: TMyClass 



В процессе работы массив заполняется изображениями.

для удаления всех изображений из памяти достаточно
Код: pascal
1.
freeAndNil(mc);

или на дистрой класса надо пробегать по массиву и

Код: pascal
1.
freeAndNil(imgs[i]);


?
...
Рейтинг: 0 / 0
TArray<TBitmap> чистка памяти
    #40072251
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо пробегать
...
Рейтинг: 0 / 0
TArray<TBitmap> чистка памяти
    #40072262
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 TBitmapRec = record
  strict private
  FBM: TBitmap;
 public
  class operator Initialize(out ADest: TBitmapRec);
  class operator Finalize(var ADest: TBitmapRec);
  property BM: TBitmap Read FBM Write FBM;
 end;

class operator TBitmapRec.Initialize(out ADest: TBitmapRec);
begin
 ADest.FBM := TBitmap.Create;
end;

class operator TBitmapRec.Finalize(var ADest: TBitmapRec);
begin
 FreeAndNil(ADest.FBM);
end;

TMyClass = class
 imgs: TArray<TBitmapRec>;
 ...
end;

var
 mc: TMyClass



Можешь сделать так. Тогда не надо будет. Нужна 10.4 делфи и выше.
...
Рейтинг: 0 / 0
TArray<TBitmap> чистка памяти
    #40072310
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
makhaon
antox,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 TBitmapRec = record
  strict private
  FBM: TBitmap;
 public
  class operator Initialize(out ADest: TBitmapRec);
  class operator Finalize(var ADest: TBitmapRec);
  property BM: TBitmap Read FBM Write FBM;
 end;

class operator TBitmapRec.Initialize(out ADest: TBitmapRec);
begin
 ADest.FBM := TBitmap.Create;
end;

class operator TBitmapRec.Finalize(var ADest: TBitmapRec);
begin
 FreeAndNil(ADest.FBM);
end;

TMyClass = class
 imgs: TArray<TBitmapRec>;
 ...
end;

var
 mc: TMyClass




Можешь сделать так. Тогда не надо будет. Нужна 10.4 делфи и выше.


по сути, всё равно пробегать нужно будет, но неявно
расслабляет вас синтаксический сахарок.
ой, как расслабляет
...
Рейтинг: 0 / 0
TArray<TBitmap> чистка памяти
    #40072315
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

SetLength и Finalize достаточно. пробегать нигде не надо.
...
Рейтинг: 0 / 0
TArray<TBitmap> чистка памяти
    #40072317
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
makhaon
defecator,

SetLength и Finalize достаточно. пробегать нигде не надо.


а для чего тогда вот это всё 22325811 ?
...
Рейтинг: 0 / 0
TArray<TBitmap> чистка памяти
    #40072318
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?? а RTL что делать будет ...
...
Рейтинг: 0 / 0
TArray<TBitmap> чистка памяти
    #40072319
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Dmitry Arefiev
?? а RTL что делать будет ...


действительно
...
Рейтинг: 0 / 0
TArray<TBitmap> чистка памяти
    #40072335
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы меня не путайте
Нигде не надо 'пробегать', всё само:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

 TBitmapRec = record
  strict private
  FBM: TBitmap;
 public
  class operator Initialize(out ADest: TBitmapRec);
  class operator Finalize(var ADest: TBitmapRec);
  property BM: TBitmap Read FBM Write FBM;
 end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

class operator TBitmapRec.Initialize(out ADest: TBitmapRec);
begin
 ADest.FBM := TBitmap.Create;
 Form2.Memo1.Lines.Add('Create');
end;

class operator TBitmapRec.Finalize(var ADest: TBitmapRec);
begin
 FreeAndNil(ADest.FBM);
 Form2.Memo1.Lines.Add('Free');
end;

procedure TForm2.Button1Click(Sender: TObject);
var
 imgs: TArray<TBitmapRec>;
begin
 SetLength(imgs, 2);
 Finalize(imgs);
end;

end.



Create
Create
Free
Free
...
Рейтинг: 0 / 0
TArray<TBitmap> чистка памяти
    #40072336
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее, этого достаточно:

Код: pascal
1.
2.
3.
4.
5.
6.
procedure TForm2.Button1Click(Sender: TObject);
var
 imgs: TArray<TBitmapRec>;
begin
 SetLength(imgs, 2);
end;
...
Рейтинг: 0 / 0
TArray<TBitmap> чистка памяти
    #40072361
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТС'у на будущее, если сомневаешься, в не старых делфях можно проверить утечки добавив в файл проекта
Код: pascal
1.
2.
3.
4.
5.
6.
begin
  ReportMemoryLeaksOnShutdown := True;
  Application.Initialize;
  Application.CreateForm
  Application.Run;
end.
...
Рейтинг: 0 / 0
TArray<TBitmap> чистка памяти
    #40072380
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
istrebitel
ТС'у на будущее, если сомневаешься, в не старых делфях можно проверить утечки добавив в файл проекта
Код: pascal
1.
2.
3.
4.
5.
6.
begin
  ReportMemoryLeaksOnShutdown := True;
  Application.Initialize;
  Application.CreateForm
  Application.Run;
end.



10.3 проф. Надо попробовать эту штуку.

Пока сделал пробег по массиву и freeAndNil на каждый элемент на дистрой
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TArray<TBitmap> чистка памяти
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]