26. November 2009 11:44
26. November 2009 11:58
26. November 2009 12:05
Ich würde sagen, dass Version a schneller ist, denn meiner Erfahrung hat gezeigt, dass NAV grundsätzlich alle Teilbedingungen prüft und erst dann logisch verknüpft.
Wenn also xy ein FALSE liefert, wird in Variante b erst yz geprüft, obwohl das Ergebnis des IF durch das falsche xy bereits feststeht. Interessant wird das für die Performance natürlich erst, wenn xy und yz eine gewisse Berechnungszeit erfordern, die sich durch Variante a sparen liese.
Und ob dannoder
- Code:
IF xy THEN
IF yz THENschneller ist, bleibt separat zu prüfen.
- Code:
IF yz THEN
IF xy THEN
26. November 2009 12:14
26. November 2009 12:39
mikka hat geschrieben:...
Auch hier müsste es per Test ermittelt werden!
Documentation()
OnRun()
/////////////////////////////////////////////////////////////////////
// Variante a:
/////////////////////////////////////////////////////////////////////
gdtStart := CURRENTDATETIME;
IF A AND B THEN;
MESSAGE('Variante a: %1', CURRENTDATETIME-gdtStart);
/////////////////////////////////////////////////////////////////////
// Variante b:
/////////////////////////////////////////////////////////////////////
gdtStart := CURRENTDATETIME;
IF A THEN
IF B THEN;
MESSAGE('Variante b: %1', CURRENTDATETIME-gdtStart);
/////////////////////////////////////////////////////////////////////
// Variante a1: (ohne aufwendige A und B)
/////////////////////////////////////////////////////////////////////
gdtStart := CURRENTDATETIME;
FOR i := 1 TO 1000000 DO BEGIN
IF A1 AND B1 THEN;
END;
MESSAGE('Variante a1: %1', CURRENTDATETIME-gdtStart);
/////////////////////////////////////////////////////////////////////
// Variante b1: (ohne aufwendige A und B)
/////////////////////////////////////////////////////////////////////
gdtStart := CURRENTDATETIME;
FOR i := 1 TO 1000000 DO BEGIN
IF A1 THEN
IF B1 THEN;
END;
MESSAGE('Variante b1: %1', CURRENTDATETIME-gdtStart);
A() : Boolean
//* Ich hab jetzt mal ganz viel zu tun, das dauert eine Sekunde
SLEEP(1000);
EXIT(FALSE);
B() : Boolean
//* Ich hab auch ganz viel zu tun, das dauert sogar zwei Sekunden
SLEEP(2000);
EXIT(FALSE);
A1() : Boolean
//* Ich habe nicht viel zu tun, ich liefere sofort FALSE
EXIT(FALSE);
B1() : Boolean
//* Ich habe nicht viel zu tun, ich liefere sofort FALSE
EXIT(FALSE);
26. November 2009 17:41