Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Speicherproblem bei Restresponse nach Dataset - Seattle (https://www.delphipraxis.net/202119-speicherproblem-bei-restresponse-nach-dataset-seattle.html)

Blackpit 30. Sep 2019 17:11

Speicherproblem bei Restresponse nach Dataset - Seattle
 
Hallo,
ich hab hier ein seltsames Problem bei Abruf eines Services mit der Datenmenge des Response.
Ich bin leider nicht für den Service zuständig, muss daher nehmen was ich bekomme.
Der Service liefert nach OAuth2-Anmeldung einen JsonResponse, welcher an ein Dataset übergeben in einem Grid dargestellt wird.
Anfänglich bekam ich ca. 400000 DS mit vier Felder und alles lief wie gewünscht. Zwischenzeitlich wurde um drei Felder erweitert und ich bekomme entweder einen out of memory bei einer Prozessspeicherlast von ca. 2GB oder einen Listindex(2) Fehler.
Gibt es eine Speicherbegrenzung beim RestResponseDataset-Adapter?
Hoffe es kann mir jemand helfen!

hoika 30. Sep 2019 18:59

AW: Speicherproblem bei Restresponse nach Dataset - Seattle
 
Hallo,
32-Bit hat natürlich eine Speicherbegrenzung.

Blackpit 1. Okt 2019 11:44

AW: Speicherproblem bei Restresponse nach Dataset - Seattle
 
Ne, daran liegt es sicher nicht, 32bit lassen einen 4GB Adressraum zu.
Und wenn ich zur Verarbeitung von vielleicht 70-80MB Daten schon 2GB für DS und MT beanspruche, frage ich mich wofür?
Ich finde da ist noch Potential am JSON2Dataset-Konzept.
Lustig ist auch die Verdoppellung der Prozessorlast im Asynchronen Abruf, dadurch konnte ich aber die kritische Stelle ermitteln.
Der Request und Datentransfer des Service bereitet keine Probleme, das Problen tritt scheinbar beim füllen des MT's auf.
Wenn ich keine Lösung finden sollte, werde ich wohl zu Fuß gehen müssen.
Hat jemand noch eine Idee?

ManBu 1. Okt 2019 14:08

AW: Speicherproblem bei Restresponse nach Dataset - Seattle
 
Hi,

also erstmal bei einem 32Bit-Prozess kannst du über folgendes PE-Flag deinen verfügbaren Speicher erhöhen:

Delphi-Quellcode:
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}



Ich habe die Beobachtung gemacht, dass die JSON-Implementierung von Embarcadero recht speicherintensiv ist.
Falls du das selber umsetzen willst kannst du dir mal die JsonDataObjects-Implementierung anschauen.

Kannst du vielleicht bei deiner Schnittstelle nur häppchenweise abfragen? Könnte auch eine Alternative sein.

Gruß,
Manuel

Blackpit 1. Okt 2019 17:18

AW: Speicherproblem bei Restresponse nach Dataset - Seattle
 
Zitat:

Zitat von ManBu (Beitrag 1448659)
Hi,

also erstmal bei einem 32Bit-Prozess kannst du über folgendes PE-Flag deinen verfügbaren Speicher erhöhen:

Delphi-Quellcode:
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
...

Das hat geholfen, ich erinnere mich auch an die Problematik, hatte sie aber nicht auf'm Schirm.

Zitat:

Zitat von ManBu (Beitrag 1448659)
...
Ich habe die Beobachtung gemacht, dass die JSON-Implementierung von Embarcadero recht speicherintensiv ist.
Falls du das selber umsetzen willst kannst du dir mal die JsonDataObjects-Implementierung anschauen.

Dem kann ich nur zustimmen, zumindest unter Seattle.
Allerdings hat ein Versuch mit ParseJsonValues den gleichen Speicherverbrauch, den zu Fuß weg selbst zu parsen und zu füllen habe ich noch nicht getestet.
Zitat:

Zitat von ManBu (Beitrag 1448659)
...
Kannst du vielleicht bei deiner Schnittstelle nur häppchenweise abfragen? Könnte auch eine Alternative sein.

Was ja der eigentlichen Servicefunktionalität entsprechen würde, aber leider hat der Lieferant davon keinen Plan.
Ein FlatFile mit den Infos wäre performanter und schonender für die Resourcen ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz