AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kleiner Optimierungstest

Ein Thema von Stefan Hueg · begonnen am 9. Jul 2006 · letzter Beitrag vom 9. Jul 2006
 
jbg

Registriert seit: 12. Jun 2002
3.485 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Kleiner Optimierungstest

  Alt 9. Jul 2006, 11:19
Zitat von Stefan Hueg:
Aber mich hatte es nunmal interessiert ob der Compiler nen Unterschied zwischen "if Control.Checked = True" oder "if Control.Checked" macht
Ja den macht er. Und der ist sogar gravierend. Wenn du ersteres benutzt macht er einen direkten Vergleich mit der Zahl 1. Wohingegen bei zweiteren auf ungleich 0 geprüft wird. Nimmt man jetzt die Definition von True her, dann stellt man Fest, das alles True ist, was ungleich False (=0) ist. Mit dem direkten True Vergleich kann es also auch vorkommen (vor allem wenn man von einer WinAPI oder C/C++ Funktion einen Boolean erhält, dass der Compiler "-1 = 1" prüft und somit der Ausdruck im gesamten False ergibt, obwohl die -1 auch ein True-Wert ist.

Delphi-Quellcode:
var
  b: Boolean;
begin
  b := Boolean(-1);
  if b then
    ShowMessage('Wird angezeigt');
  if b = True then
    ShowMessage('Solche Fehler sind später schwer zu finden. Ach ja, der Dialog wird _nicht_ angezeigt.');
end;
Noch ein Wort zum "Str <> ''" vs. "Length(Str) > 0". Nicht nur das zweiteres mehr Tipparbeit ist, es enthält auch einen Funktionsaufruf, der immer Zeit kostet da die Prefetch-Queue des Prozessors neu aufgebaut werden muss. Das "Str <> ''" entspricht vom Code einem "Pointer(Str) <> nil".


Um noch eine Optimierung anzusprechen:
Wenn man bei Parameters, die vom Typ String, Variant und dyn. Array sind, sollte man wenn möglich den "const" Operator benutzen. Dadurch erzeugt der Compiler keinen Extracode, der dafür sorgt, dass beim Eintritt in die Funktion der Referenzzähler des Parameters erhöht wird und beim Austritt (abgesichert durch ein try/finally) wieder heruntergezählt wird.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz