Autor |
Beitrag |
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 29.12.10 23:06
Hey,
ich steh grad vor ne Frage, bei der ich nich richtig weiter weiß. Und zwar geht es bei meinem derzeitigen Projekt auch sehr stark um Performance, also versuch ich überall, wo ich was raus holen kann was raus zu holen, dass das Programm schneller läuft. Was mich zu der Frage führt, was beim Aufruf von Methoden schneller ist. Die Übergabe der Parameter mit const oder als Zeiger. Ich dachte immer, das const auch nix anderes sind als Zeiger, bei denen der dann der Compiler meckert, wenn man die schreiben will. Heut hab ich aber bemerkt, das der Parameter in der Methode eine andere Adresse haben, als die übergebene Variable. Nun die eigentliche Frage: Wäre ich da mit Pointern auf die Variable nicht schneller? Weil die Daten da nich nochma extra kopiert werden müssen. Nachteil daran is, das man versehentlich Variablen ändern kann, die man eigentlich nur Lesen wollte, aber da muss ich dann halt aufpassen was ich mach. Was meint ihr dazu?
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Do 30.12.10 01:49
Ich denke mal, da wird es nix performanteres als Pointer geben. Das Const ist doch nur dazu da, beim Compilieren festzustellen, ob du irgendwo aus Versehen einen schreibenden Zugriff auf die Variable programmiert hast...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Do 30.12.10 03:29
Ich würde einen Profiler verwenden, um damit die Funktionen und Prozeduren zu ermitteln, in denen die meiste Zeit verplempert wird. Und dann genau da ansetzen. Alles andere ist nur Kosmetik ...
Profiler siehe z. B. hier: www.prodelphi.de/
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 30.12.10 06:56
Const übergibt by-value, während pointer "by-ref" übergeben. Ohne separat selber aufpassen zu müssen, kannst Du da auch gleich var verwenden, was z.B. bei Omorphia an vielen Stellen in der Mathe-Bibliothek gemacht ist, obwohl die Parameter nicht angefasst werden. U.U. kannst Du dabei sogar ein Stackframe einsparen, was noch einmal etwas Geschwindigkeit bringt. Im Endeffekt kann Dir da aber nur ein Profiler weiterhelfen, obgleich ich bei allen "statisch instrumentalisierenden" Profilern abraten muss. Intel vTune oder AQTime liefern hier sehr gute Ergebnisse und funkltionieren bei eingeschalteten TD32-Debug-Symbolen auch für Delphi wunderbar.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Zuletzt bearbeitet von BenBE am So 02.01.11 05:45, insgesamt 1-mal bearbeitet
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Do 30.12.10 12:47
Hey,
ich weiß schon ungefähr, wo die langsamsten Stellen im Code sind, aber da hab ich schon so gut optimiert, wie es geht. Mit der Idee oben wollt ich das letzte aus dem Code rauskitzeln.
Ich werd die Tools aber trotzdem mal probieren, vlt hab ich ja noch irgendwo etwas übersehen. Dankeschön.
MfG Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
|