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.
c#
visual-studio
xamarin
xamarin.android
Srinivas Ch
quelle
quelle
Antworten:
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 .
quelle
android:largeHeap="true"
Tag und dann sehenlogcat
fürGrow heap (frag case)
zu sehen , wenn ART mehr Speicher zuzuweisen versuchtDie ausgewählte Antwort führte mich in die richtige Richtung, aber für Visual Studio 2017 sieht der Bildschirm folgendermaßen aus:
quelle
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>
quelle
Klicken Sie für Visual Studio 2015 mit der rechten Maustaste auf Projekt -> Eigenschaften -> Android-Optionen -> Erweitert und Heap-Größe.
quelle
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
quelle
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
quelle
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.
quelle
Das Erhöhen der maximalen Java-Heap-Größe funktioniert bei mir
quelle
Ich hatte das Hinzufügen unten im Anwendungs-Tag von AndroidManifiest.xml behoben
<application android:largeHeap="true" android:label="sample"></application>
quelle