Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Leistung eines Programms (https://www.delphipraxis.net/127321-leistung-eines-programms.html)

vsilverlord 11. Jan 2009 10:29


Leistung eines Programms
 
Hallo, ich hab hier ein etwas größeres Programm immer noch am laufen [für meine Verhältnisse groß :-D ]
Das war ein riesiger Quelltext, ein giganter Quelltext. Ich hab dann angefangen die einzelnen Funktionen und Proceduren zu strukturieren und in units auszulagern. Ich hab jetzt fast alles ausgelagert, der Quelltext ist jetzt auch erfreulicherweise nur noch eine Seite lang [dafür aber 5 kleine units draussen].

Jetzt kommt der SCHOCK! mit Entsetzen muss ich nun feststellen, dass meine alte Programmversion deutlich leisuntsstärker ist wie meine neue! omg! :shock:
Die neue ruckelt sogar richtig! (ich arbeite mit einem timer)
was tun?
alles nochmal neu zurücklagern? [die alte version will ich nicht mehr, da sind so viele features nicht drin! :( ]
ich bin entsetzt!

3_of_8 11. Jan 2009 10:32

Re: Leistung eines Programms
 
Ich nehme mal an, du hast einen Fehler gemacht, der viel Performance kostet. Irgendwo Stellen, an denen du auf irgendwas wartest oder irgendetwas, das möglicherweise ziemlich groß ist, kopierst? Was ist der Speicherverbrauch deines Programms?

mkinzler 11. Jan 2009 10:34

Re: Leistung eines Programms
 
Eine Zerlegung eines Programmes in mehrere Units sollte eigentlich keine derartigen Performance verursachen.
Ohne nährere Details des Quellcodes zu kennen ist es aber nicht leicht abzuschätzen, worin der Grund für das Verhalten zu suchen ist.

Btw. 5 Seiten Quellcode sind nicht gigantisch

vsilverlord 11. Jan 2009 10:37

Re: Leistung eines Programms
 
ich hab an der Berechnung nichts verändert, nur die units ausgelagter.

mkinzler 11. Jan 2009 10:38

Re: Leistung eines Programms
 
Dadurch wird ein Programm aber nicht so langsamer.

TBx 11. Jan 2009 10:57

Re: Leistung eines Programms
 
Zitat:

Zitat von vsilverlord
[die alte version will ich nicht mehr, da sind so viele features nicht drin! :( ]

Zitat:

Zitat von vsilverlord
ich hab an der Berechnung nichts verändert, nur die units ausgelagter.

Würd sagen, hier widersprichst DU Dir selbst.
Versuch mal die neuen Features in des aktuellen Version zu Klammern und vergleiche das Laufzeitverhalten dann mit Deiner alten Version. Sonst ist das eh ein Vergleich von Äpfeln und Birnen.

Gruß
Thomas

WS1976 11. Jan 2009 11:15

Re: Leistung eines Programms
 
Hallo,

ich habe ähnliches erlebt. Suche nach doppelt vorhandenen Variablen.
Variablen können in verschiedenen Units mit gleichem Namen deklariert sein.
Wenn du diese Variablen benutzt, kannst du nie genau vorhersagen welche benutzt werden.
Es gab hier eine rießige Diskussion zu diesem Thema.

Grüsse
Rainer

mkinzler 11. Jan 2009 11:16

Re: Leistung eines Programms
 
Zitat:

Wenn du diese Variablen benutzt kannst du nie genau vorhersagen welche benutzt werden.
Das eigentlich schon, auf ersten Blick natürlich nicht.

Die Muhkuh 11. Jan 2009 11:18

Re: Leistung eines Programms
 
Globale Variablen sind auch pfui!

3_of_8 11. Jan 2009 11:18

Re: Leistung eines Programms
 
Wobei ich mich frage, was das dann mit der Performance zu tun hat. (Aber globale Variablen sind ja sowieso ein Antipattern, genau aus dem Grund)

EDIT: Verdammt...

Bernhard Geyer 11. Jan 2009 11:20

Re: Leistung eines Programms
 
Zitat:

Zitat von vsilverlord
ich hab an der Berechnung nichts verändert, nur die units ausgelagter.

Du hast deine Funktionalität in mehrere Funktionen zerlegt. Werden die Funktionen oft mit vielen Parametern aufgerufen und dann auch dort noch Strings oder Records verwendet?

SirThornberry 11. Jan 2009 11:29

Re: Leistung eines Programms
 
Hast du nur Funktionen von einer Unit in eine andere verschoben oder hast du eine Funktion in mehrere zerlegt? Wenn zweiteres der Fall ist - hast du mal versucht ob es mit inline schneller ist?

mkinzler 11. Jan 2009 11:30

Re: Leistung eines Programms
 
Im Zweifel lagere diese nur in andere Dateien aus, welche du dann inkludierst.

vsilverlord 11. Jan 2009 12:21

Re: Leistung eines Programms
 
Zitat:

Du hast deine Funktionalität in mehrere Funktionen zerlegt. Werden die Funktionen oft mit vielen Parametern aufgerufen und dann auch dort noch Strings oder Records verwendet?
JA! Viele Parameter. Oft riesige arrays von records mit einigen Currencys.
-> Soll ich die Funktionen zurücklagern?
Die Klassen hab ich auch ausgelagert. Zurücklagern?
Ein Grund für das Auslagern ist außerdem, dass ich sie in anderen Programmen auch mitbenutzen kann. Das hat sich wohl damit erledigt =(
:|

SirThornberry 11. Jan 2009 12:23

Re: Leistung eines Programms
 
Wenn du es in extra funktionen gepackt hast und immer riesige Daten diesen übergibst ist es klar. Denn beim Aufruf von Funktionen wird ja der Stack mit den Parametern bepackt und beim Zurückkehren wieder geleert.
Könntest du das ganze eventuell in eine eigene Klasse packen, dann kannst du auf die Parameter verzichten und verwendest an stelle dessen member.

jfheins 11. Jan 2009 12:25

Re: Leistung eines Programms
 
Übergebe nicht riesige Array of record - das ist langsam.

Entweder du kapselst die Arrays in eine Klasse, dann wird automatisch nur ein Pointer übergeben.

Oder du definierst einen Pointer auf das Array und übergibst den.

Oder am einfachsten: Du schreibst const/var vor den Parameter um ihn per Referenz zu übergeben ;)

3_of_8 11. Jan 2009 12:26

Re: Leistung eines Programms
 
Beschreibst du diese Arrays und Records denn in deinen ausgelagerten Funktionen? Wenn nein, sollten sie eigentlich nicht kopiert werden, häng mal ein const davor, wenn ja, sollen diese Änderungen sich auf die übergebenen Originale auswirken bzw. dürfen sie es? Wenn ja, ändere den Parametertyp mal in "var" um.

mkinzler 11. Jan 2009 12:26

Re: Leistung eines Programms
 
Wie gesagt, dürfte das Auslagern nicht der Hauptgrund zu sein. Aber ohne weitere Angaben, verkommt dieser Thread zu einem weiterem Hellseherthread.

vsilverlord 11. Jan 2009 12:30

Re: Leistung eines Programms
 
member? das ist mir jetzt zu hoch. :cry:

mkinzler 11. Jan 2009 12:34

Re: Leistung eines Programms
 
Dann wäre ein Studium von Grundlagentutorials zur OOP deinerseits in Erwägung zu ziehen

vsilverlord 11. Jan 2009 12:40

Re: Leistung eines Programms
 
also ein const hängt da schon von Anfang an davor, davor hatt es überhaupt nicht funktioniert. Danke für eure zahlreichen und weisen Antworten, ich werde sie zur Rate ziehen. Trotzdem glaube ich, dass ich einfach die einzelnen Funktionen durchgehen werde, und diejenigen, an denen es wohl hängt, wieder ins Programm zurücklagern, das scheint mir jetzt am sinnvollsten. Der nächste Schritt ist eindeutig der einer Klasse, da habt ihr Recht, da hab ich mir auch schon Gedanken gemacht. [siehe Thread array->dyn array Denkfehler, der ist auch von mir] Allerdings ist mir das eher etwas neu mit den DP-Collections, da werd ich mich erst mal einarbeiten müssen.

WS1976 12. Jan 2009 13:24

Re: Leistung eines Programms
 
Hallo vsilverlord,

ich wollte in meinem Beitrag daraufhinaus, dass du vielleicht auf irgendein Ereignis wartest.
Vielleicht hast du zwei Variablen in zwei Units mit gleichen Namen.

Beispiel
ich_bin_fertig:boolean;

die hast die in beiden Units Unitweit deklariert (globale Variablen, im eigentlichen Sinn, gibts in Delphi nicht)
Wartest du jetzt in Unit2 auf die Variable aus Unit1 fragst aber die aus 2 ab kannst du warten bis du schwarz wirst.
Es kommt nur auf die Reihenfolge an in der die Units in der Uses Klausel stehen ob du die eine oder die andere siehst.

Grüsse
Rainer


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz