Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Was ist schneller, Funktion oder Prozedure? (https://www.delphipraxis.net/55903-ist-schneller-funktion-oder-prozedure.html)

Angel4585 28. Okt 2005 13:36


Was ist schneller, Funktion oder Prozedure?
 
Also ich hab einmal
Delphi-Quellcode:
Procedure x(var Arg : integer);
begin
Arg:=0;
end;
und

Delphi-Quellcode:
function y:integer;
begin
Result:=0;
end;
die ja beide glaube ich das selbe machen

einziger Unterschiede ist der AUfruf :

Delphi-Quellcode:
x(erg);
Delphi-Quellcode:
erg:=y;
Aber Sind Beide genau gleichschnell in der Ausführung oder ist eins schneller?


Edit: :hello: ich hab die no bashing signatur JUHU :party:

Neotracer64 28. Okt 2005 14:20

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;

malo 28. Okt 2005 14:24

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:

Angel4585 28. Okt 2005 14:25

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?)

sakura 28. Okt 2005 14:26

Re: Was ist schneller, Funktion oder Prozedure?
 
Zitat:

Zitat von Angel4585
Hmm.. Funktion ist schneller, Prozedur schwankt zwischen 4 und 5, Funktion konstant bei 3

(bedeutet doch das funtion schneller ist oder?)

Setze das ganze mal in eine Schleife und lasse diese 100000 Mal laufen. Alles andere ist zu kurz für einen guten Mittelwert ;)

...:cat:...

Neotracer64 28. Okt 2005 14:31

Re: Was ist schneller, Funktion oder Prozedure?
 
Dann halt

Delphi-Quellcode:
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;
Funktion is bei mir schneller :)

Angel4585 28. Okt 2005 14:32

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:
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;
bei anz = 10000000 wird plötzlich die Prozedur schneller (3,14 für prozedure und 3,26 für Funktion)

sakura 28. Okt 2005 14:35

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:...

Flocke 28. Okt 2005 14:39

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.

Angel4585 28. Okt 2005 14:40

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 11:00 Uhr.
Seite 1 von 4  1 23     Letzte »    

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