![]() |
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! |
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?
|
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 |
Re: Leistung eines Programms
ich hab an der Berechnung nichts verändert, nur die units ausgelagter.
|
Re: Leistung eines Programms
Dadurch wird ein Programm aber nicht so langsamer.
|
Re: Leistung eines Programms
Zitat:
Zitat:
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 |
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 |
Re: Leistung eines Programms
Zitat:
|
Re: Leistung eines Programms
Globale Variablen sind auch pfui!
|
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... |
Re: Leistung eines Programms
Zitat:
|
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?
|
Re: Leistung eines Programms
Im Zweifel lagere diese nur in andere Dateien aus, welche du dann inkludierst.
|
Re: Leistung eines Programms
Zitat:
-> 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 =( :| |
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. |
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 ;) |
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.
|
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.
|
Re: Leistung eines Programms
member? das ist mir jetzt zu hoch. :cry:
|
Re: Leistung eines Programms
Dann wäre ein Studium von Grundlagentutorials zur OOP deinerseits in Erwägung zu ziehen
|
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.
|
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