Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Threads - System überlastet???
ralfi - So 28.09.03 15:04
Titel: Threads - System überlastet???
Hallo!
Habe ein Problem: ich habe in meiner Progi 8-10 Threads, die eigentlich nicht besonders rechenintensive Aufgaben gleicher Art erledigen. Es ist so, dass nach ca. 10 Minuten das CPU-Auslastung stabil auf 100% und die Auslagerungsdatei ca, 560 MB groß ist. Wenn ich das Programm ausschalte, ist alles wieder in Ordnung. Was ist das und wie kann ich das verhindern?
Die kritische bereiche sind synchrinisiert, allso alles wie empfollen.
Kann es deswegen sein, dass die Threadwiederholungen mit sehr kleiner Pause (ca. 5 Sec.) arbeiten?
Andreas Pfau - So 28.09.03 19:40
Hallo,
hört sich nach schlechtem Speichermanagment an. Kennst du Memproof? Ich würde das mal ausprobieren! Oder zeige doch mal den Quellltext, da muss doh cwas dran sein!
Memproof:
http://www.automatedqa.com/downloads/memproof.asp
ralfi - So 28.09.03 22:12
Ich habe mein Progi mit MemProof getestet. Dem Ergebniss glaube ich nicht ganz. Das System wird überlastet, wenn die Threads Dalay-Pocedur aufrufen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Delay(MSec: Longint); var Start, Stop: Longint; begin Start := GetTickCount; repeat Stop := GetTickCount; Application.ProcessMessages; until (Stop - Start ) >= msec; end; |
Wenn die procedur aufgerufen wird, steigt die CPU-Auslastung auf 100%, wenn die Pause vorbei ist, steigt diese auf 2% ab. Was ist das den?
Kann diese Procedur so viel Recourcen brauchen? Wie kann ich sonst die Pause zwieschen Thread-Wiederholungen realisieren?
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Motzi - So 28.09.03 23:34
In diesem Code hast du sowas wie eine Endlosschleife die solange läuft wie sie Rechenzeit bekommt... änder sie so um:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Delay(MSec: Longint); var Start, Stop: Longint; begin Start := GetTickCount; repeat Stop := GetTickCount; Application.ProcessMessages; Sleep(1); until (Stop - Start ) >= msec; end; |
barfuesser - Mo 29.09.03 08:41
Warum benutzt Du eigentlich nicht gleich sleep anstatt Deiner selbstgeschriebenen Delay-Methode?
barfuesser
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!