Web App gibt Speicher nicht frei

  1. 4 months ago

    Ich habe testweise einen Web-Client für mein Doppelkopf-TCP-Server geschrieben.
    Alles noch im Debug-Modus.
    Im Prinzip nichts Anspruchsvolles. 2x48 Bilder (Karten) werden geladen. Es wird sich über TCP-Socket mit dem Server verbunden.
    Das Problem ist folgendes:
    Sobald sich ein Client anmeldet, wird ca 130 MB mehr Arbeitsspeicher verbraucht, der NICHT wieder freigegeben wird, wenn der Client die Session beendet.
    Geladen werden Die Bilder in 48 WebImageviews, die dann sichtbar bzw unsichtbar gemacht werden.
    Wie kann ich den Speicher einer Session bzw eines Clients wieder frei geben?

  2. Christian S

    Aug 12 Pre-Release Testers, Xojo Pro Germany

    Das geht automatisch.
    Die Session wird erst eine Mitte nach dem Auflegen geschlossen.

    Und sofern da keine zirkulären Referenzen sind, müsste auch alles aufgeräumt werden.

  3. Lars L

    Aug 12 Europe (Germany, Chemnitz)

    Du hast sicher circle references in deiner App. Suche mal danach in der Doku.

    Die Freigabe von RAM erfolgt erst wenn der Webbrowser die Session beendet, was häufig erst 3-10 Minuten nach dem Schließen des Browsertabs erfolgt.

  4. Edited 4 months ago

    Wie ich bereits schrieb, der Speicher wird NICHT freigegeben, auch nicht nach 10 Minuten.
    Ich habe schon alle Arrays mit Redim MyArray(-1) auf null gesetzt, bringt 2 MB, mehr nicht. Was kann es noch sein?
    Ein Bug vielleicht?

  5. Christian S

    Aug 12 Pre-Release Testers, Xojo Pro Answer Germany

    das Array leeren sollte nicht wirklich nötig sein.

    Wichtiger wäre zu schauen, ob es Referenzen in Objekten gibt, die wieder auf die Webseite, die Session oder ein Steuerelement zeigen. Diese Verbindungen sollten gelöst werden. z.B. als Weak Reference oder durch nil setzen, wenn die Seite schließen soll.

  6. Edited 4 months ago

    Ich verstehe leider nicht was du damit meinst, Christian. Kannst du das vielleicht anders beschreiben oder ein kleines Beispiel geben?
    Vielleicht habe ich mich auch undeutlich ausgedrückt.
    Ich meine NICHT den Browser, sondern die DebugWeb.exe
    Die füllt sich immer mehr mit Speicher und gibt keinen mehr frei.

  7. Christian S

    Aug 13 Pre-Release Testers, Xojo Pro Germany

    Also wenn du auf einer Webseite eine Referenz auf ein Daten Objekt hast und darin steckt wieder eine Referenz auf die Webseite, dann ergibt das Referenzen im Kreis, die Xojo nicht aufräumen kann.

    Oder wenn man eine Baumstruktur hat mit Verzweigungen und der Baum hat Referenzen auf die Äste, dann sollten die Äste keine oder nur eine WeakRef auf den Baum haben. Sonst wird der Baum eben nicht freigegeben.

  8. Ok, ich rate mal: Du meinst mit Referenz vielleicht einen Zeiger auf etwas?
    Dim w=new Window1 (window1 ist eine webpage)
    Ist w dann eine Referenz?
    Tatsächlich habe ich aber nur eine einzige Seite mit 48 Webimages und einigen Buttons.
    Ich verlinke nirgends hin.
    Die Webimages habe ich tatsächlich alle einzeln erstellt:
    webimage1
    webimage2
    webimage3 usw

    Dann habe ich ein Property (public) erstellt
    Karte(48) as webimagefew

    Dann habe ich die wieder einzeln zugewiesen:
    Karte(1)=webimage1
    Karte(2)=webimage2
    Karte(3)=webimage(3) ...bis 48

    Bei window1.close (Ereignis) habe ich dann folgendes probiert:
    for i=1 to 48
    Karte(i).Picture=NIL
    Karte(i)=NIL
    next i

    Dann noch jedes einzelne Image von Hand gelöscht:
    webimage1.Picture=NIL
    webimage2.Picture=NIL
    webimage3.Picture=NIL ..bis 48

    Dann noch:
    webimage1=NIL
    webimage2=NIL
    webimage3=NIL

    Bringt alles NICHTS
    Der Speicher wird NICHT freigegeben.

or Sign Up to reply!