Was ist schneller, Funktion oder Prozedure?
Also ich hab einmal
Delphi-Quellcode:
und
Procedure x(var Arg : integer);
begin Arg:=0; end;
Delphi-Quellcode:
die ja beide glaube ich das selbe machen
function y:integer;
begin Result:=0; end; einziger Unterschiede ist der AUfruf :
Delphi-Quellcode:
x(erg);
Delphi-Quellcode:
Aber Sind Beide genau gleichschnell in der Ausführung oder ist eins schneller?
erg:=y;
Edit: :hello: ich hab die no bashing signatur JUHU :party: |
Re: Was ist schneller, Funktion oder Prozedure?
Teste es doch mal :)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var lol,lol2: Int64; v: Integer; begin QueryPerformanceCounter(lol); x(v); QueryPerformanceCounter(lol2); Label1.Caption := IntToStr(lol2-lol); QueryPerformanceCounter(lol); v := y; QueryPerformanceCounter(lol2); Label2.Caption := IntToStr(lol2-lol); end; |
Re: Was ist schneller, Funktion oder Prozedure?
Ich denke, wenn es Performence-Unterschiede gibt, dann ist die function langsamer, weil dort noch ein Rückgabewert gespeichert wird. Aber das ist so minimal, dass der Unterschied nicht spürbar ist. Es wird halt höchstens noch eine Variable mehr gespeichert, mehr passiert nicht ;)
Edit: Schmarn, es ging ja darum, dass bei der Procedure eine Variable per Parameter zurückgegeben wird. :oops: |
Re: Was ist schneller, Funktion oder Prozedure?
Hmm.. Funktion ist schneller, Prozedur schwankt zwischen 4 und 5, Funktion konstant bei 3
(bedeutet doch das funtion schneller ist oder?) |
Re: Was ist schneller, Funktion oder Prozedure?
Zitat:
...:cat:... |
Re: Was ist schneller, Funktion oder Prozedure?
Dann halt
Delphi-Quellcode:
Funktion is bei mir schneller :)
procedure TForm1.Button1Click(Sender: TObject);
var lol,lol2: Int64; v: Integer; i: Integer; begin QueryPerformanceCounter(lol); For i := 1 To 100000 Do begin x(v); end; QueryPerformanceCounter(lol2); Label1.Caption := IntToStr(lol2-lol); QueryPerformanceCounter(lol); For i := 1 To 100000 Do begin v := y; end; QueryPerformanceCounter(lol2); Label2.Caption := IntToStr(lol2-lol); end; |
Re: Was ist schneller, Funktion oder Prozedure?
WOW, das ändert das ganze schon beträchtlich : Prozedur liegt bei 3,107773 Funktion bei 3,087948
Edit :
Delphi-Quellcode:
bei anz = 10000000 wird plötzlich die Prozedur schneller (3,14 für prozedure und 3,26 für Funktion)
var
lol,lol2: Int64; v,w,i: Integer; const anz = 1000000 ; begin w:=0; for i:= 1 to anz do begin QueryPerformanceCounter(lol); xx(v); QueryPerformanceCounter(lol2); w:=w+ lol2-lol; end; Label1.Caption := FloatToStr(w/anz ); w:=0; for i:= 1 to anz do begin QueryPerformanceCounter(lol); v:=y; QueryPerformanceCounter(lol2); w:=w+ lol2-lol; end; Label2.Caption := FloatToStr(w/anz ); end; |
Re: Was ist schneller, Funktion oder Prozedure?
Damit kannst Du sagen: nutze das, was Dir an der Stelle beim Schreiben mehr nutzen bringt (wahrscheinlich die Funktion), da der Geschwindigkeitsunterschied vernachlässigbar gering ausfällt ;)
...:cat:... |
Re: Was ist schneller, Funktion oder Prozedure?
Du solltest allerdings die Aufrufe von QueryPerformanceCounter aus der Schleife herausnehmen und jeweils nur zwei Mal aufrufen - das verfälscht doch beträchtlich.
|
Re: Was ist schneller, Funktion oder Prozedure?
:wiejetzt: :gruebel:
nach 100.000.000 ist wieder die Funktion vorne... naja ich muss dann bald mal .. schönes WE euch allen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz