OutOfMemoryException in Xamarin abrufen

76

java.lang.OutOfMemoryError. Erhöhen Sie möglicherweise den Wert von $ (JavaMaximumHeapSize). Java hat nicht genügend Speicher, während 'java.exe' ausgeführt wurde.

Ich habe in meinem Visualstudio Xamarin-Projekt eine Ausnahme wegen Speichermangels. Bitte helfen Sie mir, wie ich dieses Problem beheben kann.

Srinivas Ch
quelle
2
Ich möchte empfehlen, LargeHeap nicht nur auf true zu setzen. Stattdessen sollten Sie versuchen, herauszufinden, was diese OOM verursacht, und das beheben. Andernfalls hätten Sie sich vielleicht etwas Zeit gekauft, bis es Sie wieder trifft.
Tequila Slammer

Antworten:

124

Ich würde Ihre Build-Heap-Größe erhöhen.

Klicken Sie mit der rechten Maustaste auf Ihr Android-Projekt> Eigenschaften > Android-Optionen > Erweitert > Java Max Heap Size .

Geben Sie hier die Bildbeschreibung ein

Iain Smith
quelle
Ja du hast Recht. Aber wo kann ich meine App-Größe in Visual Studio Xamarin erhöhen.
Srinivas Ch
3
@SrinivasCh In Ihrem Manifest den Add - android:largeHeap="true"Tag und dann sehen logcatfür Grow heap (frag case)zu sehen , wenn ART mehr Speicher zuzuweisen versucht
SushiHangover
Funktioniert gut Danke für die Antwort @lain Smith
Srinivas Ch
@SushiHangover Ah ok, ich hatte diesen Fehler schon einmal und habe gerade den Heap hier erhöht, aber Sie haben Recht, wenn Sie möchten, dass Sie einen großen Heap verwenden müssen, dann bearbeiten Sie die Manifeste
Iain Smith
@ Srinivas-Ch keine Sorge
Iain Smith
20

Die ausgewählte Antwort führte mich in die richtige Richtung, aber für Visual Studio 2017 sieht der Bildschirm folgendermaßen aus:

VS 2017 aktualisierte Bildschirme

VS 2017 aktualisierte Bildschirme

Mrogunlana
quelle
18

Wenn Sie die Heap-Größe Ihrer Anwendung erhöhen möchten (nicht den Erstellungsprozess), können Sie dies in Ihrer AndroidManifest.xml festlegen:

<application android:largeHeap="true"></application>
Matt
quelle
12

Klicken Sie für Visual Studio 2015 mit der rechten Maustaste auf Projekt -> Eigenschaften -> Android-Optionen -> Erweitert und Heap-Größe.

DavidM
quelle
Machen Sie das: Klicken Sie mit der linken Maustaste auf <Projekt> .Droid -> Doppelklicken Sie auf "Eigenschaften" -> Klicken Sie links auf "Android-Optionen" -> Klicken Sie auf die Registerkarte "Erweitert" -> "Java Max Heap Size"
LionelGoulet
7

Ab Xamarin Studio Version 6.3 und Visual Studio 7.0.1 finden Sie hier die Option zum Erhöhen der Heap-Größe

Klicken Sie mit der rechten Maustaste auf das Android-Projekt, wählen Sie Optionen und wählen Sie " Build / Android Build" , dann die Registerkarte " Erweitert" und legen Sie 1G (oder etwas anderes ) in der Java-Heap-Größe fest

Geben Sie hier die Bildbeschreibung ein

Durai Amuthan.H
quelle
4

Wenn Ihnen die Größe eines 1G-Heapspeichers ausgeht, beginnen Sie mit der Optimierung der Ressourcen.

Überprüfen Sie zunächst, ob Sie keine Bildinstanzen duplizieren, und behalten Sie dasselbe Bild mehrmals im Speicher. Verwenden Sie dazu die ffimageloading-Bibliothek ( https://github.com/luberda-molinet/FFImageLoading ), um sie schnell und einfach auf nuget zu bringen.

Optimieren Sie dann die von Ihnen verwendeten Bilder. Versuchen Sie bei großen Bildern, außer Symbolen, alles in JPEG umzuwandeln, ohne PNG mit Transparenz zu vermeiden, was mich einst für konstante Ooms gerettet hat.

Versuchen Sie dann, Miniaturansichten anstelle von Bildern zu verwenden, wenn Sie möglicherweise große hochgeladene Bilder auf der Fernbedienung haben. Erstellen Sie auf Ihrem Server Miniaturansichten für verschiedene Größen (Mini, Klein, Mittel, Normal, Groß, Groß usw.) und laden Sie nur Bilder mit der Größe, die Sie wirklich benötigen. Das spart viel Speicher und Geschwindigkeit.

Ein anderer ist Speicherlecks. Möglicherweise befinden sich Zellen oder andere Elemente noch im Speicher, wenn sie sich nicht von Nachrichten, Ereignishandlern und anderen abmelden. Stellen Sie sich vor, Sie könnten mehrere Kopien einer Liste voller Bilder noch im Speicher haben, wenn Sie sicher sind, dass dies nicht möglich ist. Mehr Infos hier:

https://forums.xamarin.com/discussion/123876/should-we-unsubscribe-all-events-for-memory-management

https://forums.xamarin.com/discussion/87206/messaging-center-unsubscribe-from-all-messages-when-broadcast-stops

Nick Kovalsky
quelle
2

Nach meiner Erfahrung treten Speicherprobleme NUR bei der Android-Version der Xamarin.Forms-App auf. Und es muss sich immer um große Bilder handeln. Ich habe dieses Problem mithilfe von FFImageLoading ( https://github.com/luberda-molinet/FFImageLoading ) behoben.

Ersetzen Sie Ihre

<Image Source="waterfront.jpg" />

Mit

<ffimageloading:CachedImage Source="waterfront.jpg"
DownsampleToViewSize = true,
BitmapOptimizations = true/>

Sie werden drastische Leistungsverbesserungen feststellen und auch Ihre Speicherprobleme lösen.

Dylan Liu
quelle
1

Das Erhöhen der maximalen Java-Heap-Größe funktioniert bei mir

Geben Sie hier die Bildbeschreibung ein

fulgen
quelle
-1

Ich hatte das Hinzufügen unten im Anwendungs-Tag von AndroidManifiest.xml behoben

<application  android:largeHeap="true" android:label="sample"></application>
Divya
quelle