Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Code Optimierung zu ".. is <type>"

  Alt 11. Mär 2022, 11:57
Auf jeden Fall ist (lComponent as TLabel) langsamer als TLabel(lComponent).
TLabel(lComponent) aber vorher in eine Variable vom Typen TLabel zu schreiben scheint keinen Unterschied zu geben.

Hier einmal ein Beispiel.

Wieso das so ist kann ich aber auch nicht genau sagen, würde mich aber auch interessieren.

Delphi-Quellcode:
type
  TTest = class
    Int: Integer;
  end;
procedure TForm105.Button1Click(Sender: TObject);
var
  lObject: TObject;
  i : Integer;
  lStopwatch: TStopwatch;
  lTest: TTest;
begin
  lObject := TTest.Create;
  try
    lTest := TTest( lObject);
    lStopwatch := TStopwatch.StartNew;
    for I := 0 to MaxInt do
    begin
// (lObject as TTest).Int := i; // 8,7 Sekunden
// TTest( lObject).Int := i; // 2,5 Sekunden
// lTest.Int := i; // 2,5 Sekunden
    end;
    lStopwatch.Stop;
    ShowMessage( lStopwatch.Elapsed.Duration.ToString);
  finally
    lObject.Free;
  end;
end;
Da kann man sich ja mal ansehen, was der Compiler draus macht (siehe Anlage).

Bei "as" erfolgt noch ein Sprung woanders hin (in die system.pas, und dort werden eine Reihe von Befehlen abgearbeitet), das kostet zeit..
Miniaturansicht angehängter Grafiken
asclass.png  

Geändert von Harry Stahl (11. Mär 2022 um 12:00 Uhr)
  Mit Zitat antworten Zitat