Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   iOS Webservice client -> Speicher leak? -> Low Memory event! (https://www.delphipraxis.net/186018-ios-webservice-client-speicher-leak-low-memory-event.html)

weisswe 28. Jul 2015 08:22

iOS Webservice client -> Speicher leak? -> Low Memory event!
 
Hallo!

Ich habe einen iOS SOAP Webservice client erstellt (mit WSDL import).
Funktioniert auch soweit.
Nun hab ich einen Stress-Test gemacht - also alle paar Sekunden einen Call aufgerufen.
Nach ca. 5000 Calls meldet iOS den Event -> Low Memory und die Anwendung geht in den Hintergrund.
Hab zuerst gedacht es liegt am Netzwerk, dann an einem Timeout - doch alles Ok.
Unter Windows gibt es keine Probleme.
Auch habe ich verschiene Webservices auf verschiedenen Servern probiert - immer das gleiche Ergebnis.

Ist das ein bekanntes Problem? Kann es ein Fehler im XMLVendor sein (OmniXML)?? :-/

Sir Rufo 28. Jul 2015 08:33

AW: iOS Webservice client -> Speicher leak? -> Low Memory event!
 
Riecht ja ein wenig nach ARC mit zirkulären Referenzen. Zwei Instanzen halten jeweils eine Referenz auf die andere Instanz und werden somit nicht freigegeben.

Unter Windows (Nicht-ARC) passiert das natürlich nicht.

weisswe 28. Jul 2015 08:41

AW: iOS Webservice client -> Speicher leak? -> Low Memory event!
 
Die Frage ist nun wie ich das Problem vermeinden kann.
Ich rufe ja nur einen Call auf --> webservice.function().
Das tückische ist ja dass es nach n-Calls "sichtbar" wird.

Falls jemand auch eine iOS-App mit Webservice calls hat -> bitte auch mal einen Stresstest machen... :-/

Union 28. Jul 2015 08:45

AW: iOS Webservice client -> Speicher leak? -> Low Memory event!
 
Hast Du es mal mit anderen XML-Vendors versucht? Bringt es da das gleiche Ergebnis? Tritt das Verhalten auch im Simulator auf?

Sir Rufo 28. Jul 2015 08:54

AW: iOS Webservice client -> Speicher leak? -> Low Memory event!
 
Ich denke mal, dass es eher an OmniXML liegt.

Da gibt es die Beziehung zwischen
Delphi-Quellcode:
TXMLNode
und dem
Delphi-Quellcode:
TXMLDocument
. Jede Node-Instanz hat eine strong Referenz auf die Document-Instanz. Und wenn die Document-Instanz eine strong Referenz auf die Node-Instanzen hat, dann ist dein Speichergrab perfekt.

Prüfen kannst du das, indem du einfach mal in den Destruktor der Klassen eine Log-Ausgabe hineinbringst. Dann siehst du, ob und wann die freigegeben werden.

So wie ich das sehe, ist OmniXML nicht für ARC angepasst.

weisswe 28. Jul 2015 09:13

AW: iOS Webservice client -> Speicher leak? -> Low Memory event!
 
Danke Sir Rufo für die Analyse.
Kann ist unter iOS einen anderen XML Vendor verwenden?
In der Doku steht das für Cross-Platform Apps der OmniXML verwendet werden soll.. :-/

Oder vielleicht mache ich bei der Zuordnung etwas falsch!?

Im program file habe ich als erste Zeile:
Delphi-Quellcode:
begin
   DefaultDOMVendor := sOmniXmlVendor;
   Application.Initialize;
   ...
end;

Union 28. Jul 2015 09:23

AW: iOS Webservice client -> Speicher leak? -> Low Memory event!
 
Du kannst auch sAdom4XmlVendor verwenden.

Mavarik 28. Jul 2015 09:38

AW: iOS Webservice client -> Speicher leak? -> Low Memory event!
 
Hast Du Dir mal Deinen Speicher mit Instruments angesehen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 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