![]() |
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? |
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 |
Re: CPU-Auslastung reduzieren
Hallo
In der Ini-Datei sind Geburtsdaten gespeichert, in folgendem Format:
Code:
Sie Könnte sich immer ändern.
[name]
gebtag=21.03.1989 bem=Bemerkung [name2] ... |
Re: CPU-Auslastung reduzieren
Moin Onz,
und wodurch sollten sich diese Daten spontan von selber ändern? |
Re: CPU-Auslastung reduzieren
Durch das Programm.
|
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 |
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: |
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 |
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? |
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. |
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:
|
Re: CPU-Auslastung reduzieren
Moin Onz,
Zitat:
Könntest Du mir bitte mal erklären, wozu die Daten alle 5 Sekunden gelesen werden müssen? |
Re: CPU-Auslastung reduzieren
Ich schätze mal, es handelt sich dabei um die Funktion, die abfragt, ob gerade jetzt jemand Geburtstag hat, oder?
|
Re: CPU-Auslastung reduzieren
Das verstehe ich auch nicht ganz....wie ich oben halt oben schon geschireben habe...
|
Re: CPU-Auslastung reduzieren
Stimmt eigentlich, da habt ihr recht.
Ich werde das nochmal überarbeiten :roll: |
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: |
Re: CPU-Auslastung reduzieren
Zitat:
Zitat:
|
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 |
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. |
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. :| |
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.
|
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
|
Re: CPU-Auslastung reduzieren
Ja, daran arbeite ich gerade.
|
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?
|
Re: CPU-Auslastung reduzieren
Ich hab dsa Problem gelöst.
|
Re: CPU-Auslastung reduzieren
Lies die Daten in einen Array ein, mit dem du dann Arbeiten kannst!
Gruß 1PM |
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 |
Re: CPU-Auslastung reduzieren
er hat doch das Problem schon im Griff.
|
Re: CPU-Auslastung reduzieren
Ja, es wird jetzt bei jeder Änderung einfach aktualisiert. Viel einfacher :D
|
Re: CPU-Auslastung reduzieren
ähm du musst noch die Frage auf beantowrtet stellen
|
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. |
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. |
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ß |
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~ |
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