Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi CPU-Auslastung reduzieren (https://www.delphipraxis.net/6579-cpu-auslastung-reduzieren.html)

moritz 15. Jul 2003 18:00


CPU-Auslastung reduzieren
 
Hi

In einem Prog von mir werden in regelmäßigem Abstand Daten aus einer Ini-Datei gelesen. Das können machnmal bis zu 600 Zeilen sein, was den CPU immer recht schön belastet. Wie kann ich das reduzieren?

moori 15. Jul 2003 18:48

Re: CPU-Auslastung reduzieren
 
Hi Onz,

könntest du deine Frage genauer Formulieren???

Was für eine INI-Datei?
Verändert Sie sich ständig?
Wie liest du darin??

Ein bischen Quellcode währe noch hilfreich...


Gruss Moori

moritz 15. Jul 2003 18:57

Re: CPU-Auslastung reduzieren
 
Hallo

In der Ini-Datei sind Geburtsdaten gespeichert, in folgendem Format:
Code:
[name]
gebtag=21.03.1989
bem=Bemerkung
[name2]
...
Sie Könnte sich immer ändern.

Christian Seehase 15. Jul 2003 18:58

Re: CPU-Auslastung reduzieren
 
Moin Onz,

und wodurch sollten sich diese Daten spontan von selber ändern?

moritz 15. Jul 2003 19:00

Re: CPU-Auslastung reduzieren
 
Durch das Programm.

Alexander 15. Jul 2003 19:02

Re: CPU-Auslastung reduzieren
 
mhm ich würde sagen, dass du das eigentlich nicht so leicht reduzieren kannst, es sei denn du optimierst die INI-DAtenbank bzw. den Auslese-Code.
Oder du kannst das alles in einen Thread auslagern und dann die Priorität auf niedrig oder sonst was stellen.
Oder du liest einfach nur die Sachen aus, die du brauchst.
Vielleicht hilft es auch, wenn du statt der Ini-DAtenbank auf andere richtige Datenbanken zurückgreifst oder vielleicht CVS-DAteien, weiß aber nicht, ob es was bringt

Stanlay Hanks 15. Jul 2003 19:03

Re: CPU-Auslastung reduzieren
 
@Christian: Berechtigte Frage :mrgreen: Ein Mensch wird ja nur einmal geboren. (Außer bei einigen anderen Religionen :mrgreen:)

Weitere offene Fragen:

1) Was hast du denn für einen PC
2) Wie oft in der Minute/Sekunde werden die Daten gelesen
3) Betriebssystem
4) Is die Belastung wirklich so schlimm? :wink: Also ich meine, schmiert Windows irgendwie ab, oder andere Programme?

Man liest sich, Stanlay :hi:

Alexander 15. Jul 2003 19:08

Re: CPU-Auslastung reduzieren
 
also ich denke, dass die Antworten zu den Fragen doch varieren können.
Schließlich soll das Programm auf jedem PC funktionieren.
Würde mir mal überlegen, ob es irgendwie möglich ist, die Daten nicht alle auf einmal zu laden, sondern stückchen weise.
Oder halt in einem Thread. Aber ich habe ja oben schon was geschireben

Christian Seehase 15. Jul 2003 19:08

Re: CPU-Auslastung reduzieren
 
Moin Onz,

und warum muss das Programm regelmässig die Daten ändern?
Wie Stanlay ja schon geschrieben hat:
Geburtsdaten ändern sich i.d.R. nicht so schnell.

Wenn jetzt ein einzelner Wert geändert wird (Eintrag neu anlegen, Eintrag ändern, Eintrag löschen) kann dieser ja direkt und einzeln bearbeitet werden. Ich sehe da im Moment keine Notwendigkeit immer alle Einträge zu lesen.

Was die CPU Belastung angeht:
Was geschieht denn mit den ausgelesenen Daten?
Werden die z.B. in einen ListView o.ä. übertragen?

moritz 15. Jul 2003 19:09

Re: CPU-Auslastung reduzieren
 
Hallo

Es wird alle 5 sekunden ausgelöst. Nein, die Belastung bei MIR ist nicht schlimm, ich hab auch nur wenige Einträge.
Aber die Belastung bei anderen, die um einiges mehr haben ist größer.
Das mit dem Thread ist ne gute Idee, werde das mal versuchen.

Stanlay Hanks 15. Jul 2003 19:11

Re: CPU-Auslastung reduzieren
 
Aber für was um Gottes willen rufst du ständig die Geburtsdaten ab? Reicht doch, wenn du sie am Anfang abrufst und irgendwo "parkst" (Array etc.). Dann musst du nicht immer auf die Ini zugreifen. :wink:

Christian Seehase 15. Jul 2003 19:11

Re: CPU-Auslastung reduzieren
 
Moin Onz,

Zitat:

Zitat von Onz
Es wird alle 5 sekunden ausgelöst.

:shock:

Könntest Du mir bitte mal erklären, wozu die Daten alle 5 Sekunden gelesen werden müssen?

Stanlay Hanks 15. Jul 2003 19:14

Re: CPU-Auslastung reduzieren
 
Ich schätze mal, es handelt sich dabei um die Funktion, die abfragt, ob gerade jetzt jemand Geburtstag hat, oder?

Alexander 15. Jul 2003 19:14

Re: CPU-Auslastung reduzieren
 
Das verstehe ich auch nicht ganz....wie ich oben halt oben schon geschireben habe...

moritz 15. Jul 2003 19:15

Re: CPU-Auslastung reduzieren
 
Stimmt eigentlich, da habt ihr recht.
Ich werde das nochmal überarbeiten :roll:

Stanlay Hanks 15. Jul 2003 19:17

Re: CPU-Auslastung reduzieren
 
[OT] Mal so am Rande: Hat sich etwa wer über deinen BirthdayRemember beschwehrt? :shock: Kann ich mir eigentlich nicht vorstellen. [\OT]

Man liest sich, Stanlay :hi:

moritz 15. Jul 2003 19:21

Re: CPU-Auslastung reduzieren
 
Zitat:

Zitat von Stanlay Hanks
[OT] Mal so am Rande: Hat sich etwa wer über deinen BirthdayRemember beschwehrt? :shock: Kann ich mir eigentlich nicht vorstellen. [\OT]

Man liest sich, Stanlay :hi:

Du hast es!
Zitat:

Hallo!

Mir gefällt das Programm recht gut, allerdings sind mir ein paar \"Unschönheiten\" aufgefallen:
Ich benutze das Programm auch während meiner Arbeit und von den z.B. 8 Stunden, in denen der Rechner läuft benötigt BirthdayReminder über 1 Stunde CPU-Zeit. Des weiteren liegt die Speichernutzung nach dieser Zeit bei über 80MB!!!
Alle 5 Sekunden meldet der Taskmanager, daß Birthdayreminder 80% der CPU benutzt.
Das kommt mir alles etwas viel vor, vielleicht kann man an den Routinen noch etwas optimieren.
Ansonsten gefällt mir das Programm wirklich gut!

MfG

#################

moori 15. Jul 2003 19:21

Re: CPU-Auslastung reduzieren
 
Hi Onz,

ich würde für sowas nicht ne INI Datei verwenden. Ne INI-Datei ist mehr für Einstellungen die initiiert werden müssen, also bei Programmstart geladen werden müssen. Während des Programmes sollte man dan nur darauf zugreifen, um "defaults" oder "user-settings" auszuwerten und sie, falls geändert, abzuspeichern.

Als Speicher für irgendwelche Daten ist sie eher ungeeignet, da die Maximale Grösse einer INI Datei doch vom System begrenzt ist. (OK es gibt auch "BigIniFiles" die das aufheben.)

Verwende doch ne Datenbank oder einfach nur eine Textdatei als Speicher.

Gruss Moori

Christian Seehase 15. Jul 2003 19:31

Re: CPU-Auslastung reduzieren
 
Moin Onz,

wenn Du die Daten einmal einliest, und dann regelmässig prüfst sollte das genügen.

Die Grösse der INI Files könnte, wie moori ja schon sagte, unter gewissen Umständen (9x/ME) zu Problemen führen.

Als Ersatz würden dann "normale" StringListen dienen können, schau Dir dazu mal deren Eigenschaft Values an. Das würde dann zwar etwas mehr Verwaltungsaufwand für die Zuordnung von Name und Wert mit sich bringen, aber Du bist von der Grösse her auf der sicheren Seite.

moritz 15. Jul 2003 19:44

Re: CPU-Auslastung reduzieren
 
Also, ich werde vorraussichtlich bei ini's bleiben, da der Umstellungsauwand sehr sehr sehr hoch wäre.
Ich bin der Sache eins weiter auf die SPur gekommen:
Je mehr Einträge, je mehr geht das nach oben. :|

Luckie 15. Jul 2003 20:01

Re: CPU-Auslastung reduzieren
 
Und dass das Programm zum Schluß 80MB braucht, ich würde da mal kucken, ob du auch immer überall den Speicher wieder freigibst.

Alexander 16. Jul 2003 11:32

Re: CPU-Auslastung reduzieren
 
Du darst halt nicht alle 5 sec immer alles auslesen, sondern nur am anfang alles auslesen und dann, wenn sich was ändert, musst du das vorhergelesene immer nur updaten

moritz 16. Jul 2003 12:04

Re: CPU-Auslastung reduzieren
 
Ja, daran arbeite ich gerade.

Blizzard 16. Jul 2003 13:05

Re: CPU-Auslastung reduzieren
 
Schonmal daran gedacht die datei von nem tshellchangenotifier (palette beispiele) überwachen zu lassen und nur wenn sich was ändert neu in nen array zu laden?

moritz 16. Jul 2003 13:11

Re: CPU-Auslastung reduzieren
 
Ich hab dsa Problem gelöst.

1PM 16. Jul 2003 13:44

Re: CPU-Auslastung reduzieren
 
Lies die Daten in einen Array ein, mit dem du dann Arbeiten kannst!

Gruß 1PM

woki 16. Jul 2003 16:03

Re: CPU-Auslastung reduzieren
 
Hallo,

sicher ist das Konzept, ini-datei, alle fünf sekunden neu einlesen etc nicht ganz optimal, vorsichtig ausgedrückt, aber der schnellste Weg hier eine deutliche Verbesserung zu erreichen, ohne viel Änderungsaufwand, wäre wohl statt TInifile TMemInifile zu verwenden.

Das stopft natürlich nicht das Speicherloch.

Grüsse
Woki

Alexander 16. Jul 2003 16:12

Re: CPU-Auslastung reduzieren
 
er hat doch das Problem schon im Griff.

moritz 16. Jul 2003 18:48

Re: CPU-Auslastung reduzieren
 
Ja, es wird jetzt bei jeder Änderung einfach aktualisiert. Viel einfacher :D

Alexander 17. Jul 2003 09:22

Re: CPU-Auslastung reduzieren
 
ähm du musst noch die Frage auf beantowrtet stellen

Dannyboy 19. Aug 2003 15:54

Re: CPU-Auslastung reduzieren
 
Yo, und auf ganz primitive Art und Weise kannst Du
ja periodisch die Api-Funktion "sleep" aufrufen, um die Cpu
ein wenig durchatmen zu lassen.

Alexander 19. Aug 2003 15:55

Re: CPU-Auslastung reduzieren
 
Das ist aber auch lästig, da dann die ganze Anwendung einfriert...

Außerdem ist glaube ich die Frage/Problem schon länger gelöst.

moritz 19. Aug 2003 18:04

Re: CPU-Auslastung reduzieren
 
Hallo

Ja, das mit der sleep-Funktion ist nicht so dolle.
Das Problem ist inzwischen auch gelöst, ich habe einfach die Verarbeitungsmenge um 90% reduziert.

Gruß

Aya 19. Aug 2003 18:47

Re: CPU-Auslastung reduzieren
 
Hi,

kleine optimierungsgeschichte noch... *g*
Wieso überprüfst du alle 5sek alle 600 Einträge ob da jetzt einer Geburtstag hat???

Ich meine, wenn ich doch vor 5sek nicht geburtstag hatte, habe ich denke ich mal jetzt auchnicht geburtstag, genausowenig wie ich in 5sek geburstag haben werde.. *g*

Ich würde vorschlagen du schaust nur alle 5sek nach ob nen neuer Tag ist, und nur dann testest du deine 600 Leutchen durch ob einer von denen am heutigen Tag geburtstag hat ;)

Au'revoir,
Aya~

moritz 19. Aug 2003 18:49

Re: CPU-Auslastung reduzieren
 
Hi

So ähnlich habe ich es auch gelöst.

Onz


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 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