Einzelnen Beitrag anzeigen

rabatscher

Registriert seit: 13. Dez 2007
Ort: Bruck an der Mur
69 Beiträge
 
#7

AW: Klasse implementiert ein Interface weniger, höherer Speicherverbrauch

  Alt 27. Dez 2023, 15:24
Also... soweit ich das sehe (bitte korrigieren, falls ich falsch liege.., wird für jedes Interface ein zusätzliches Feld im
Ojekt angelegt. (siehe TObject.InitInstance in system.pas) . D.h. Wenn das Interface
hinzugefügt wird, erhöht sich der Speicher dementsprechend um 4Byte pro angelegtes Ojekt.

Man kann sich den Speicherverbrauch einer Klasse/Objekt auch per "InstanceSize" anschauen....


Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  IIntf1 = interface
   ['{6AB3BE8C-8605-4ED6-97DA-CEED84E5B9F4}']
   procedure Test1;
  end;

  IIntf2 = interface
   ['{A2614303-1914-4BBE-9D38-D306EF36B14B}']
   procedure Test2;
  end;

type
  TObj1 = class(TInterfacedObject, IIntf1)
  public
    procedure Test1;
    procedure Test2;
  end;

type
  TObj2 = class(TInterfacedObject, IIntf1, IIntf2)
  public
    procedure Test1;
    procedure Test2;
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var obj1 : TObj1;
    obj2 : TObj2;
begin
     obj1 := TObj1.Create;
     obj1.Test1;
     obj1.Free;

     obj2 := TObj2.Create;
     obj2.Test1;
     obj2.Free;
end;

{ TObj1 }

procedure TObj1.Test1;
begin
     ShowMessage('Obj1 size:' + IntToStr(InstanceSize));
end;

procedure TObj1.Test2;
begin
     ShowMessage('obj1 test2');
end;

{ TObj2 }

procedure TObj2.Test1;
begin
     ShowMessage('Obj2 size: ' + intToStr(InstanceSize));
end;

procedure TObj2.Test2;
begin
     ShowMessage('test2');
end;

end.
  Mit Zitat antworten Zitat