Page 2 of 2 FirstFirst 1 2
Results 16 to 26 of 26

Thread: optimalisatie van stukje code

  1. #16
    De exception raisen en handlen is trager, en proberen item met ID x te vinden is ook trager. Count checken is doorgaans snel, omdat veel list-achtige classes die count bijhouden in een variabele.

    Alleen, het feit dat Count > 0, is natuurlijk geen garantie op succes, want het ID kan ook nog ongeldig zijn, en in dat geval zal de exception 'ontsnappen' in het tweede fragment. Ze zijn dus ook functioneel niet hetzelfde.
    Wil je ze functioneel wél hetzelfde maken, dan heb je dus ook in de tweede situatie exception handler nodig (of een IndexOf of Exists check, als je collection zoiets bevat), maar dan is je winst weer weg, tenzij je in veel gevalleen een count van 0 hebt.
    En dan nog is de vraag, hoe vaak roep je dit aan, en hoeveel winst ga je nou eigenlijk echt halen? Is het het waard om over na te denken? Bij een beetje standaard gebruik in een standaard-applicatie, waar ID bijvoorbeeld door een gebruiker wordt ingetypt, gaat het om microseconden. Mensen hebben meer tijd besteed aan het schrijven van deze vraag en z'n antwoorden dan dat zo'n applicatie in een jaar besteedt aan de minder optimimale oplossing van de twee.
    1+1=b

  2. #17
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Wel, net zoveel mensen hebben dezelfde drogredenen weer opgebraakt terwijl ze ook gewoon sommige van de eenvoudigste performance consideraties zouden kunnen meenemen. Na een paar maakt het ook weer niet zoveel uit.

  3. #18
    Senior Member
    Join Date
    Jul 2008
    Location
    Ertvelde, Belgi?½
    Posts
    158
    Ik zou inderdaad ook een variatie op nummer 2 nemen :

    Code:
    function TPhytoDes.FindRow: TPhyto;
    begin
      if ( Assinged( FPhytolist ) ) and
         ( ID >= 0 ) and 
         ( ID < FPhytolist.Count ) then 
      begin
        Result := FPhytolist[ID];
      end
      else
      begin
        Result := nil;
      end;
    end;
    En ja ... ik weet het ... ik wil overal begin ... end ... ook al is er maar 1 lijn code in de if.

  4. #19
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    op Assigned controleren is een beetje onzin: als hij niet bestaat is hij toch al nil om als resultaat door te geven.

    Quote Originally Posted by Stefaan Lesage View Post
    En ja ... ik weet het ... ik wil overal begin ... end ... ook al is er maar 1 lijn code in de if.
    Ieuw... en al die spaties tussen de haakjes.
    TMemoryLeak.Create(Nil);

  5. #20
    Senior Member
    Join Date
    Jul 2008
    Location
    Ertvelde, Belgi?½
    Posts
    158
    Quote Originally Posted by VideoRipper View Post
    op Assigned controleren is een beetje onzin: als hij niet bestaat is hij toch al nil om als resultaat door te geven.
    Ieuw... en al die spaties tussen de haakjes.
    That's how I roll :-) Het vertraagt niets en zorgt er voor mij voor dat ik met SmartTab onmiddellijk naar die Assigned kan springen om mijn volgende criteria toe te voegen. Overkill, maar voor mij maakt het code gewoon wat leesbaarder en kan ik smart tabben.

  6. #21
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Stefaan als je precies wil zijn dan OF zekerstellen dat complete boolean evaluation uitstaat, OF (defensief programmerend):

    Delphi Code:
    1. function TPhytoDes.FindRow: TPhyto;
    2. begin
    3.    Result := nil;
    4.    if  Assigned( FPhytolist )  then
    5.      begin
    6.         if  ( ID >= 0 ) and  ( ID < FPhytolist.Count ) then
    7.           begin
    8.             Result := FPhytolist[ID];
    9.           end
    10.      end;
    11. end;

  7. #22
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    In dit soort gevallen maak ik meestal 2 smaken:
    Code:
    function Find(out aRow: TNogwat): Boolean; // false als out of bounds
    function Get: TNogwat; // exception als out of bounds

  8. #23
    En dan Find implementeren als:

    Delphi Code:
    1. try
    2.   aRow := TNogwat;
    3.   Exit(True);
    4. except
    5.   Exit(False);
    6. end;

    1+1=b

  9. #24
    En ja ... ik weet het ... ik wil overal begin ... end ... ook al is er maar 1 lijn code in de if.
    Als je een vrouw was kwam ik je een knuffel geven

  10. #25
    Senior Member
    Join Date
    Jul 2008
    Location
    Ertvelde, Belgi?½
    Posts
    158
    Quote Originally Posted by Benno View Post
    Als je een vrouw was kwam ik je een knuffel geven
    lol ... dat is ook de eerste keer dat ik zo een reactie krijg. Meestal wordt ik hiervoor bijna op de brandstapel gegooid.

  11. #26
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Quote Originally Posted by Stefaan Lesage View Post
    Meestal wordt ik hiervoor bijna op de brandstapel gegooid.
    Hahaha, zo erg is het toch niet? Qua code generatie maakt het niets uit, maar je kunt er een persoonlijke voorkeur voor hebben qua leesbaarheid. Het is niet te vergelijken met zaken die om fouten vragen, zoals with ... do.
    Ik vind het, met correcte indenting, leesbaarder zonder begin...end, vooral omdat ik met veel spaghetti code te maken heb waarin regelmatig de helft van het scherm bestaat uit if...then begin...end else-paren om een enkele instructie, maar het blijft een persoonlijk smaak.
    TMemoryLeak.Create(Nil);

Page 2 of 2 FirstFirst 1 2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •