Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TArray<TBitmap> чистка памяти / 12 сообщений из 12, страница 1 из 1
23.05.2021, 04:24
    #40072250
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TArray<TBitmap> чистка памяти
есть класс

Код: 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
23.05.2021, 06:08
    #40072251
istrebitel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TArray<TBitmap> чистка памяти
Надо пробегать
...
Рейтинг: 0 / 0
23.05.2021, 09:48
    #40072262
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TArray<TBitmap> чистка памяти
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
23.05.2021, 19:38
    #40072310
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TArray<TBitmap> чистка памяти
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
23.05.2021, 20:02
    #40072315
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TArray<TBitmap> чистка памяти
defecator,

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

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


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


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

Код: 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
23.05.2021, 22:36
    #40072336
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TArray<TBitmap> чистка памяти
Точнее, этого достаточно:

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



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

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


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