1

Wenn ich xcode Instrumente und ich Profil auf dem Emulator ausführen, werden meine UiViewControllers Dispose Methoden sofort aufgerufen, nachdem die Ansicht entfernt wurde. Aber wenn ich die App auf dem Gerät starte, werden die Dispose-Methoden aller UiViewController nie aufgerufen !. Oder werden sehr langsam genannt und die Erinnerung wird zu hoch.der Müllsammler in Xamarin Ios funktioniert nicht auf Geräten

Ich weiß nicht, warum das passiert. Das Problem ist, dass die einzige Möglichkeit, die App auf dem Gerät aufzurufen, die Dipose-Methoden aufzurufen, ist, wenn ich manuell eine Gc.Collect() in der AppDelaygate ReceiveMemoryWarning und DidEnterBackground() ausführen. Wenn eine dieser Methoden ausgeführt wird, sinkt der Speicher von 140 MB auf 70 MB.

Dies ist das Abbild des Speichers, wenn die Anwendung auf dem Emulator ausgeführt wird. Emulator Memory Allocation

Und wenn ich die App auf dem Gerät ausführen. Device Memory Allocations

Wie Sie auf dem Emulator sehen können, werden die Dispose-Methoden jedes Mal aufgerufen, wenn ein UIviewcontroller entfernt wird. Aber im Gerät werden die Entsorgungsmethoden nie aufgerufen. Der Tropfen, den Sie im Bild des Geräts sehen, ist, wenn die App zu beckground geht und ich manuell eine GC.Collect() aufrufen.

Warum geschieht das nicht automatisch im iOS-Gerät, wie im Emulator?

Ich bin sehr neu zu Xamarin, ich habe 4 Tage versucht, dies herauszufinden. Ich weiß wirklich nicht, was ich tun soll.

Ich hoffe, dass mir jemand helfen kann.

Antwort

0

Wenn Xamarin.iOS im Debug-Modus auf dem Simulator ausgeführt wird, gibt es einen Thread, der GC.Collect() alle paar Sekunden aufruft, so dass die Garbage-Collections viel häufiger als auf einem echten Gerät stattfinden.

Dies dient hauptsächlich dazu, Fehler in Ihrem Code schneller zu finden (z. B. beim Zugriff auf eine verwaltete Referenz, die bereits gelöscht wurde). Das ist der Grund, warum die Sammlung nicht so oft passiert, wie sie im Simulator beim Deployment auf dem Gerät passiert.

Sie sollten sich nicht zu viele Sorgen um Sammlungen machen, die nicht so oft passieren, GC Heuristik wird bestimmen, wann es passieren sollte, die Zeiten, in denen Sie sich "sorgen" müssen, sind wenn Sie mit großen verwalteten Objekten wie Bildern etc. arbeiten Diese Objekte innerhalb einer using-Anweisung sollten ausreichen.

+0

danke für Sie anwser –

Verwandte Themen