Roger hat das Beispiel hier veröffentlicht http://bb.donnay-software.com/donnay/vi ... f=7&t=1806
ich hab nicht gedacht das es so viel ausmachen würde
Benchmark : iVar vs. LOCAL
Moderator: Moderatoren
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Benchmark : iVar vs. LOCAL
Lokale Variablen anstelle von Klassenvariablen sind in Jimmiy Beispiel 4 mal schneller!Notice that the loops that only access locals run 4 times faster.
Tatsache ist, dass eine Referenz nach aussen immer langsamer ist, bei dir ist es nun x2:=aPoints[j].x anstelle von x2=::points[j].x Vorgängig wurde die lokale Variable aPoints defniert mit der Zuweisung aPoints:=::points. Genial.
Ich hatte einmal die Ehre beim Raumfahrtzentrum eine Stage zu machen mit Vektorprogrammierung als Thema (mit Fortran). Da war genau dies die Mission. Alles, was in Loops gerechnet wird, muss nur mit Locals gehen. Vorher zuweisen. Ebenso Funktionsaufrufe auslagern, so weit möglich.
Was früher beim Aufbau von Browse entscheidend war, heute macht man hoffentlich Queries, ist weiterhin bei Berechnungen sehr wichtig.
Schaut mal eure Codes an und ihr werdet Wunder erleben.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Benchmark : iVar vs. LOCAL
ich hatte so was auch noch nicht gesehen und war skeptisch was es tatsächlich im Gesamten ändern würde.Herbert hat geschrieben:Lokale Variablen anstelle von Klassenvariablen sind in Jimmiy Beispiel 4 mal schneller!Notice that the loops that only access locals run 4 times faster.
Tatsache ist, dass eine Referenz nach aussen immer langsamer ist, bei dir ist es nun x2:=aPoints[j].x anstelle von x2=::points[j].x Vorgängig wurde die lokale Variable aPoints defniert mit der Zuweisung aPoints:=::points. Genial.
Code: Alles auswählen
alt :
METHOD DemoDlg:FindPoint(r1,r2)
FOR i := 1 TO ::PointsCount
...
cr := ::SolveCircle(::Points[r1].x,::Points[r1].y,;
::Points[r2].x,::Points[r2].y,;
::Points[ i].x,::Points[ i].y )
neu :
LOCAL aPoints := ::points
LOCAL nPointsCount := ::PointsCount
FOR i := 1 TO nPointsCount
...
cr := ::SolveCircle(aPoints[r1].x,aPoints[r1].y,;
aPoints[r2].x,aPoints[r2].y,;
aPoints[ i].x,aPoints[ i].y )
hier noch die Demo von Roger
gruss by OHR
Jimmy
Jimmy