AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Quelle hoher Prozessorauslastung ermitteln

Ein Thema von Sven M. · begonnen am 15. Okt 2013 · letzter Beitrag vom 21. Okt 2013
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Quelle hoher Prozessorauslastung ermitteln

  Alt 15. Okt 2013, 11:12
Ich denke mal, das hier große Mengen an Daten in irgendwelchen Listen gespeichert werden, ohne das diese sich leeren (oder geleert werden).

Bestes Beispiel ist das TMemo. Das einfügen neuer Strings geht anfangs ratzfatz. Mit 20k Zeilen spürt man schon deutliche Längen nach TMemo.Add, mit 30k Zeilen bewegen wir uns langsam im Sekundenbereich für das Add etcpp. Dieselben Probleme hat auch TList, TStringList, TObjectList, TGrid und und und. Dieses Phänomen habe ich schon mit Delphi 1 beobachtet und bis heute existiert dieses Problem.

Da man dieselben Laufzeiten beobachtet, wenn man eine Textdatei >5MB mit Notepad öffnet, tippe ich auf ein in der WinAPI vergrabenes Problem mit Listen aller Art.

Abhilfe: Verhindern, das diese Listen ein gewisses Maß an "Füllgrad" überschreiten oder passende Controls suchen, die nicht auf dem WinAPI-"TList" basieren.
Ich habe bisher noch kein Betriebssystem und keine Programmiersprache erlebt, bei denen der Zeitraum für die sequenzielle Verarbeitung von Daten, nicht proportional zur Datenmenge anwuchs. Aber vielleicht kennst Du ja Alternativen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

AW: Quelle hoher Prozessorauslastung ermitteln

  Alt 15. Okt 2013, 11:41
Ich habe bisher noch kein Betriebssystem und keine Programmiersprache erlebt, bei denen der Zeitraum für die sequenzielle Verarbeitung von Daten, nicht proportional zur Datenmenge anwuchs. Aber vielleicht kennst Du ja Alternativen.
Ein Add, was er beschrieben hat, ist nunmal aber nicht sequentiell, sondern zum Beispiel in einer Linked List eine Operation mit konstanter Zeitkomplexität. Da dauert auch das 3,265,349. add nicht länger als das 2.

Wenn ich allerdings schon höre, dass eine Anwedung "2 Monate am Stück" laufen soll, dann wird es aber genau solche Gründe haben. An der Stelle sei mal angemerkt: Wenn es um Hochverfügbarkeit geht, geht man eigentlich genau den gegenteiligen weg: man entwirft sein System so, dass es problemlos mit Neustarts umgehen kann, und führt diese unter Umständen sogar gewollt herbei. Es sollte natürlich nicht prinzipiell unmöglich sein, eine Anwendung so zu schreiben, dass sie unendlich lange laufen kann, aber ich könnte mir durchaus vorstellen, dass der Aufwand dafür deutlich höher ist, als sich gleich ein ordentliches (und fehlertolerantes) Design zu überlegen.
Leo S.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

AW: Quelle hoher Prozessorauslastung ermitteln

  Alt 15. Okt 2013, 12:34
Die anderen Beiträge gehen ja in die Richtung, dass die Anwendung eine graphische Anwendung ist. Die Aufgabe wäre aber eigentlich eher etwas für einen Deamon/Service.
Dazu kannst du dann eine graphische Bedienoberfläche schreiben, auf der der Anwender herumklicken kann.

Es sollte natürlich nicht prinzipiell unmöglich sein, eine Anwendung so zu schreiben, dass sie unendlich lange laufen kann, aber ich könnte mir durchaus vorstellen, dass der Aufwand dafür deutlich höher ist, als sich gleich ein ordentliches (und fehlertolerantes) Design zu überlegen.
Eine Anwendung, die lange laufen soll, muss ein ordentliches und fehlertolerantes Design haben

Graphische Oberflächen sind nicht ganz einfach und dank der verwendeten Bibliotheken ziemlich unübersichtlich/undurchschaubar und damit einfach ein Einfallstor für Fehler.
Also sollte man das Wichtige (Daten sammeln) von der Bedienoberfläche trennen und im Zweifelsfall einfache, stabile, gut erprobte Betriebssystemfunktionen nutzen (z.B. Dateisystem, Pipes).

Geändert von BUG (15. Okt 2013 um 12:41 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Quelle hoher Prozessorauslastung ermitteln

  Alt 15. Okt 2013, 15:41
Eure Tipps sind ja nicht schlecht, aber sie beantworten nicht die Frage des OP. Mich wundert es, dass hier noch niemand das Stichwort „Profiler“ in den Raum geworfen hat. Für Delphi gibt es da den kostenlosen SamplingProfiler, der hat mir immer gereicht.

(Man muss aber unbedingt vom Compiler eine ausführliche MAP-Datei erzeugen lassen (geht in der Projektoptionen), sonst kann man nicht viel daraus ablesen)

Geändert von Namenloser (15. Okt 2013 um 15:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.990 Beiträge
 
Delphi 12 Athens
 
#5

AW: Quelle hoher Prozessorauslastung ermitteln

  Alt 15. Okt 2013, 16:26
Mich wundert es, dass hier noch niemand das Stichwort „Profiler“ in den Raum geworfen hat.
Hatte ich...
Ansonsten blieben noch Profiling Tools wie AQTime.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Quelle hoher Prozessorauslastung ermitteln

  Alt 16. Okt 2013, 07:13
Zitat:
Nun habe ich allerdings das Problem, dass anfangs alles einwandfrei funktioniert, mit steigender Laufzeit jedoch immer längere Perioden auftreten, die den Prozessor zu 100% auslasten.
Wie man sieht, klettert die CPU-Last im laufe von Tagen immer weiter. Das schreit geradezu nach dem von mir beschriebenen Phänomen und darum empfahl ich auch, erstmal dort nachzuschauen. Das geht sicher schneller, das den Profiler nun 8 Tage mitlaufen zu lassen und dann das gleiche zu erkennen
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:17 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