![]() |
Optimierung des Codes
Hey Leute!
Folgendes: in meiner ganzen Zeit hier habe ich einiges von euch gelernt, wofür ich euch auch sehr danke! Nun stehe ich aber vor einem Problem, dass sich nennt: Performance! Ich war immer so toll und habe für alles was ich mehrfache brauchte, einfach immer alles dupliziert (bspw. Timer). Was nun so einiges an bestimmt überflüssigen Code hergibt. Da ich für 5 Tage meine Pläne jeweils ausgebe, habe ich dafür auch 5 versch. Timer, die alle 10sec die HTML-Pläne erstellen. Dann wäre da noch ein Timer zum Aktualisieren der Daten (jede Sekunde) und 2 für den Upload nach x Min (Lehrer- und Schülerpläne getrennt; jeweils einzeln deaktivierbar im Programm). Insg. komme ich auf eine Größe der Exe von 1.36MB, wo ich hier im Forum auch schon drüber lesen konnte, dass selbst 1MB schon ziemlich groß sein soll. Das hat mich jetzt zum Nachdenken gebracht und wollte von euch wissen, wie man effektiv optimieren kann und welche Möglichkeiten sich mir da bieten. :) |
Re: Optimierung des Codes
Zitat:
|
Re: Optimierung des Codes
Zitat:
Flare |
Re: Optimierung des Codes
@ Phoenix: Ah, von dir war das also die Diskussion über die 22MB-MB exe. :)
Genau deswegen kam ich auf diese Optimierungsgeschichte. :) Naja ok. ;) Aber es geht dann auch noch im die Programm-Performance, da mein Programm doch des Häufigeren mal ins Stocken gerät, wenn irgendwie 5 Timer gleichzeitig insg. 13 Dateien schreiben und währenddessen alle 5 Sekunden die Daten aus der dbf geholt werden sollen. Besonders für die Planerstellung such ich noch eine bessere Alternative, um nicht immer 5 Timer gleichzeitig laufen zu lassen und den Code zu dezimieren (evtl Templates?). |
Re: Optimierung des Codes
Mit Stocken meinst Du wohl, dass das Programm nicht mehr so flüssig reagiert wie es sollte?
Da würde ich dann eher vorschlagen, die Ein- und Ausgaberoutinen mit den Dateizugriffen in Threads auszulagern, so dass diese den Haupthread mit der Oberfläche nicht mehr blockieren können. |
Re: Optimierung des Codes
Zitat:
Zitat:
Aber trotzdem hört sich das mit den Threads natürlich sehr interessant an. Hast du da irgendwie ein Tutorial o.Ä. was du mir empfehlen könntest? |
Re: Optimierung des Codes
Such mal auf Luckie seiner Homepage, da hat er ein paar sehr gute Tutorials.
|
Re: Optimierung des Codes
Die Frage, die du dir stelen solltest ist, ob du wirklich (soviele) Timer benötigst ;)
Falls es eine Möglichkeit gibt, festzustellen wann eine Aufgabe erledigt werden muss, ist das in fast jedem Fall einer Polling-basierten Lösung vourzuziehen ... Zum Beispiel: Warum musst du alle 10 sek. einen neuen HTML-Plan erstellen? Warum kannst du den nicht nur neu erstellen, wenn er geändert wurde? Timer werden häufig in Zusammenhang mit dem sog. Polling eingesetzt, und Polling ist für fast kein Problem die beste Lösung ... Das Gegenteil/bessere wäre eine Ereignisbasierte Lösung, wie ich sie oben beschrieben habe, so macht Windows auch vieles: Ein Fesnter wird nur neugezeichnet, wenn ein Ereignis eintritt, das das erfordert, die Nachrichtenschleife wird nur angestoßen, wenn eine Message da ist (in den meisten Programmen) usw. |
Re: Optimierung des Codes
Hi,
auch das Schreiben von 13 Dateien gleichzeitig klingt nicht ganz optimal. So eine Festplatte (denke mal auf die wird geschrieben) arbeitet am Effektivsten, wenn sie große Datenmengen schreibt/liest. Du hast immer eine gewisse Zeit, die vergeht um eine Datei zu suchen (Position ermitteln, Köpfe in Pos. fahren, warten bis Datum unter Kopf). Wurde die Datei erstmal gefunden, kannst Du sehr sehr große Datenmengen ziemlich flink Schreiben. Dank Cache und verschiedenen Optimierungen fällt hier selbst bei kleinen Mengen die Zugriffszeit noch recht gering aus. Wirklich gleichzeitig kannst Du aber keine 13 Dateien schreiben (außer Du hast 13 Festplatten, am besten mit 13 Bussen..). Jedenfalls heißt in dem Fall gleichzeitig schreiben, dass immer abwechselnd ein Stück in jede Datei geschrieben wird. Das Problem ist dabei dann der Wechsel zwischen den Dateien, der kostet unnötig Zeit. Besser ist es, wenn Du hier einfach eine Datei nach der anderen schreibst. Noch besser, Du verwendest sogar noch einen kleinen Schreibpuffer, sammelst also im Hauptspeicher erstmal bestimmte Mengen von Daten, die Du in eine Datei schreiben willst und schreibst erst dann, wenn eine bestimmte Menge erreicht ist. Wie gut das jeweils möglich ist, hängt natürlich vom Programm ab. Gruß Der Unwissende |
Re: Optimierung des Codes
I.A. reicht ein einziger "Timer", also eine Instanz, die zeitgesteuert irgendwelche Aufgaben erledigt. Ich würde einen Thread verwenden, der ein Liste von Jobs abarbeitet. Jeder Job wird zu einem bestimmten Zeitpunkt ausgeführt. So reicht es, wenn der Thread 1x pro Sekunde (z.B.) nachschaut, ob der nächste auszuführende Job 'schon dran' ist.
Ein periodisch auftretender Job kann 'sich selbst' dann -nachdem er abgearbeitet ist- selbst wieder in die Jobliste des Threads einfügen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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 by Thomas Breitkreuz