![]() |
Indy HTTP CPU Auslastung
Moin alle...8-)
Ich habe einen Thread zum Datenabholen via HTTP je Gerät (entspricht einer Klasse). Heute habe ich ein 2. Gerät hinzugefügt (2. Instanz der Klasse) und bin über die CPU Auslastung gestolpert. Selbst mit einem Gerät ist die Auslastung während des Post rund 50%. (Taskmanager) Die Requests sind bei jedem Gerät u.U. ein wenig größer. Warum nehmen die Indys so viel Last? Gibt es Möglichkeiten? PS: Der Firefox nimmt auch so viel beim Refresh auf Google. :shock: Quelltextauszug:
Delphi-Quellcode:
Bei der Geschwindigkeit mit der die Daten über die Leitung marschieren müßten sich die Kerne eigentlich langweilen... :roll:
FHTTP:= TIdHTTP.Create;
try FHTTP.OnWork:= DoOnWork; FHTTP.HandleRedirects:= True; FHTTP.Request.ContentType:= 'application/x-www-form-urlencoded'; FHTTP.Request.CustomHeaders.Add(Cookie); try if Parameter = '' then FHTTP.Get(Link, ResponseStream) else FHTTP.Post(Link, ParameterStream, ResponseStream); . . . Danke für Ideen, da ich bis zu 500 Geräte unterstützen will. ...ein Alptraum :( |
AW: Indy HTTP CPU Auslastung
Hallo,
anhand des Codes läßt sich noch nicht viel sagen. Wenn jedes Gerät einen eigenen Thread und darin jeweils eine eigene Instanz von TIdHTTP verwendet, kann es dennoch zu Behinderungen der Threads untereinander kommen, zum Beispiel bei gemeinsamer Nutzung von VCL Objekten in der Methode DoOnWork. Ist bei nur einem aktiven HTTP POST die Belastung deutlich unter 50%? Falls ja, spricht das für Konkurrenzprobleme. Ich würde das DoOnWork daher einfach einmal ausschalten und sehen ob die Last deutlich niedriger wird. |
AW: Indy HTTP CPU Auslastung
Danke für deine Antwort.
Zitat:
Zitat:
Zitat:
Ich hatte Breakpoints vor dem Post und danach. Bis der "danach" Breakpoint erreicht war stieg die Auslastung extrem an. Deswegen vermute ich das im Post bei großem Request. Gibt es da Tricks oder Einstellungen? Die Google Suche hat mich nicht wirklich weitergebracht. |
AW: Indy HTTP CPU Auslastung
Das ein Browser Last erzeugt ist ja auch klar, denn der muss ja nicht nur die Daten von einem Server laden, sondern die Seite rendern und das kostet Leistung.
Hat mit diesem Problem also nichts zu tun ... es sei denn deine Netzwerkkarte blockiert das System |
AW: Indy HTTP CPU Auslastung
Ist schon richtig...
Ich setzte mal nur zum Vergleich(nicht exakt): 1 HTTP Request mit 10KB Requestgröße -> 50% Auslastung 2 Sekunden 1 SQL - Masseninsert mit Firebird extern Table(549MB) -> 5 % Auslastung 15 Sekunden ...da stören mich einfach die Verhältnisse. Beispiel: Im Moment gibt es keine Datensätze. Die Anfrage braucht 2 Sekunden in der die Auslastung nach oben springt. Quasi für nix...
Delphi-Quellcode:
Langsam drängt sich mir der Verdacht auf, daß das nicht die Indys sein können. Man stelle sich einen Download von 2 großen Dateien vor... :roll:
0
LOADOK Ende: 2215 ms |
AW: Indy HTTP CPU Auslastung
Zitat:
Mit relativ wenig Zeitaufwand liesse sich das auch mit Indy's HTTP Server machen, ein OnCommandGet Handler ist schnell geschrieben. |
AW: Indy HTTP CPU Auslastung
Sooo...
ich habe dann mal den HTTP Post in eine leere Anwendung 1:1 (außer Events) übernommen. Eine Schleife darüber und laufen lassen. Ergebnis: CPU Last = 0-1% :shock: Tschuldigung bei den Indys... :stupid: Dann gibt es jetzt eine Auskommentierorgie. :cheer: gefunden... Die Lösung ist so einfach, daß ich mich :duck: Ich habe noch einen 2. Thread parallel. Bei diesem habe ich das Execute "vorbereitet" ohne wirklich die Proceduren zu füllen. Quasi nur den Rumpf. Dabei war aber eine while Schleife im Execute quasi ohne Inhalt. Das kann ja nicht funktionieren. Ein beherztes Sleep bis die Inhalte fertig sind... und gut. Auslastung bei 2 Geräten: 0-1% Tschuldigung für die Belästigung... :stupid: |
AW: Indy HTTP CPU Auslastung
Schön, dass wir mal drüber gesprochen haben :mrgreen:
Das kostet aber ein Bier auf den nächsten DT ;) |
AW: Indy HTTP CPU Auslastung
Wenn man seinen Threads einen Namen gibt (
![]() Mit dem immer besser werdenden Thread-Debugging findet man vermutlich auch solche Threads dann schneller. Schön wäre es, wenn Emba den KlassenNamen+Komponentennamen der TThread-Klasse standardmäßig automatisch daran übergeben würde. |
AW: Indy HTTP CPU Auslastung
Moin...8-)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 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