Ergebnis 1 bis 6 von 6

Thema: Performance Vergleich von zwei Funktionen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Da es ja eine reine Interessensfrage ist:
    Ich behaupte mal der zweite Teil (If-Abfrage) ist schneller.

    Es ist natürlich möglich, daß Ruby die Max- und Min-Aufrufe im ersten Teil in If-Konstrukte intern zwecks Optimierung umwandelt, aber wenn wir nicht von so einer schlauen Optimierung ausgehen, ist der erste Code aufwendiger.

    Im zweiten Teil haben wir 1 Zuweisung, 2 Vergleiche und eine boolsche Operation. Das alles sind Kernelemente der Sprache, die sich ziemlich direkt nach C abbilden lassen (in der der Ruby-Interpreter geschrieben ist).

    Im ersten Teil haben wir 2 verschachtelte Arrays. Das bedeutet Ruby wird vermutlich erst einmal Array-Objekte erzeugen, wofür er Speicher reservieren muss. Dann haben wir zwei Methodenaufrufe, das bedeutet Nachschlagen in der Funktionstabelle der Array-Klasse und einen geringen Overhead durch den Aufruf (Rücksprungadresse, lokale Variablen).
    Die Frage ist ob die min- und max-funktionen, die ja mit beliebig großen Arrays funktionieren, spezielle Implementierungen für 2-Elementige Arrays haben, wo dann eine einfache If-Abfrage ausreicht. Falls nicht, beinhalten die Aufrufe Schleifen-Konstrukte, die ein wenig aufwendiger sein könnten als eine reine If-Abfrage.

    Man darf nicht vergessen, If-Konstrukte gibt es in so gut wie jeder Programmiersprache, Objekte und Methodenaufrufe nur in Objektorientierten Sprachen - und OOP-Sprachen sind in der Regel immer langsamer als prozuderale Sprachen. Das erzeugen und verwalten von Objekten und der Aufruf von Methoden hat also immer gewisse Kosten, die eine If-Abfrage nicht hat.

  2. #2
    Vielen vielen Dank, sehr detailierte Informationen, absolut Neugier-Befriedigend. Ich werde mich daran errinern, Danke.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •