Kursabruf multithreaded programmieren

Portfolio Performance ist während des Kursabrufs ja mehr oder weniger blockiert und nicht benutzbar. Das sollte behoben werden.

Umgedreht ist mir technisch nicht klar, ob es da Abhängigkeiten zur UI geben muss? Ich denke nicht. Ich bin kein Java-Programmierer, aber da muss es doch auch analog zu async die Möglichkeit geben, Funktionen vom normalen Programmablauf zu entkoppeln und der Compiler verlagert dass dann in einen separaten Thread und blockiert nicht den eigentlichen Programmablauf.

Ich habe >400 Wertpapiere in PP und der Download dauert dadurch etwas länger und man kann in der Zeit nichts machen. Selbst elementare Sachen wie Resize vom Anwendungsfenster sind blockiert bzw. extrem ruckelig. Trotz Top-PC (i7-Prozessor der 10. Generation, 32 GB RAM, Nvme-SSD). Die CPU-Auslastung geht beim Abruf von 2% auf 6% hoch. Da ich 16 Kerne habe, wird also wohl 1 Kern mit 1 Thread zu 100% ausgelastet und die restlichen 15 Kerne drehen Däumchen.
Und der Trend geht ja in allen Prozessordesigns von wenig schnellen Kernen zu vielen langsamen Kernen (wobei ein Core-i7-Kern jetzt nicht so langsam ist). Wenn man aber Kursabruf, UI und Windowmanagement in unterschiedliche Threads/Kerne packen könnte, wäre das eine enorme Erleichterung im Alltag.

Eine Alternative wäre den automatischen Kursdownload komplett zu deaktivieren bzw. in den Einstellungen steuerbar zu machen, wann und wie oft aktive und inaktive Wertpapiere aktualisiert werden sollen.

Kann ich nicht bestätigen.

Umgekehrt: Die UI ist abhängig von den neuen Kursdaten. Es werden also während der Kursabfrage immer wieder alle Berechnungen aktualisiert. Mutmaßlich hast du sehr komplexe Dashboards und Diagramme.

Das liegt ganz sicher nicht am Abruf. Der Prozessor hat dabei nicht viel zu tun und wartet hauptsächlich auf das Eintreffen von Daten aus dem Netz.

Okay, ich kann technisch nicht beurteilen, was genau da langsam ist, aber es ist während des Abrufs der ca. 400 Positionen unbedienbar. Und >100 Positionen (die meisten habe ich schon inaktiv gemacht) dauern halt etwas abzurufen (im Bereich von einer Minute) und solange muss man nach dem Programmstart effektiv warten, bis man damit arbeiten kann.

Der Prozessor ist dabei auf 1 Kern zu 100% ausgelastet, also muss irgendwas dabei sehr rechenintensiv sein, aber nicht multihreaded programmiert sein. Ob das der Abruf, die Datenverarbeitung, die UI-Aktualisierung ist, kann ich nicht sagen. Nachdem PP aber sonst absolut flüssig bei mir läuft und ich die flüssige Bedienung als Hauptvorteil von PP sehe, bin ich jetzt laienhaft davon ausgegangen, dass es der Code von der Kursaktualisierung ist.

Noch eine Beobachtung: Beim Start von PP dagegen sind rund 10 Kerne zu 100% ausgelastet. Das Framework ansich muss also multihreaded programmiert sein.

In diesem Ordner liegt eine Demo-Datei “Demodatei-Arnulf-Koch.zip”, mit der kann man es hoffentlich nachvollziehen:
[Ich wollte den direkten Download-Link zum Google Drive posten, dass erlaubt die Foren-Software nicht, dann etwas umständlicher: Der Download-Link ist unter diesem Video verlinkt: Portfolio Performance - Download vollständige Demodatei - YouTube ]

Einfach während dem Abruf zwischen den Watchlisten oder Vermögensaufstellung oder Dashboards umschalten, es hängt überall. Oder gar nichts innerhalb der Software bedienen, sondern einfach nur die Größe vom Anwendungsfenster (wenn es nicht maximiert ist) verändern. Auch das hängt.

Da das Verhalten bei mir auf mehreren PCs identisch auftritt, gehe ich davon aus, dass es nicht an der Umgebung liegt, sondern an PP.

Ich habe es vorhin mal probiert, ich kann zum Beispiel auch neue Buchungen anlegen, während die Kurse aktualisiert werden.

Eine Minute finde ich jetzt nicht so wahnsinnig lang, aber gut …

Du könntest einfach den Abruf zum Programmstart abschalten. Dann kannst du sofort loslegen, wenn auch nicht mit den neuesten Kursen.

1 Like

OMG, ich bin so blind. Ich habe das auf meine interne PP-Wunschliste geschrieben. Jetzt habe ich nochmal gesucht und die Option gefunden. Das hilft mir kurzfristig tatsächlich weiter, wenn man etwas nachschauen möchte, dass die Software gleich einsatzbereit ist.

Das Hackelige beim Update sollte man sich aber nach und nach mal anschauen und versuchen zu beheben.

Die Kurse werden nicht in einen Background Thread geladen.

Die Logik ist in etwas so:

  • bis zu 10 Threads parallel
  • aber nie mehr als ein Request zu einem Server
  • nach 5 updates auch das UI aktualisieren

Der zweite Punkt ist wichtig, da viele viele Seiten bei zu vielen parallelen Requests keine Inhalte mehr liefern - sondern nur noch eine Fehlerseite.

Mir ist nicht so klar was bei Dir schief geht. Vielleicht wird zu häufig das UI aktualisiert - und da sind vielleicht viele Berechnungen z.B. auf dem Dashboard die neu ausgeführt werden müssen. Wenn es Dir recht ist, kannst Du mir Deine Datei an portfolio dot Performance dot help at gmail dot com schicken und ich versuche mal zu Verstehen was da die CPU Zeit frisst.