![]() |
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)?? :-/ |
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. |
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... :-/ |
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?
|
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:
und dem
TXMLNode
Delphi-Quellcode:
. 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.
TXMLDocument
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. |
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; |
AW: iOS Webservice client -> Speicher leak? -> Low Memory event!
Du kannst auch sAdom4XmlVendor verwenden.
|
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 10:01 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