web-dev-qa-db-fra.com

Sortir de l'exception de la mémoire dans Xamarin

Java.lang.OutOfMemoryError. Pensez à augmenter la valeur de $ (JavaMaximumHeapSize). Java a manqué de mémoire lors de l'exécution de 'Java.exe'

J'obtiens une exception de mémoire dans mon projet Visualstudio Xamarin. Aidez-moi à résoudre ce problème.

68
Srinivas Ch

Je voudrais augmenter la taille de votre tas de construction.

Cliquez droit sur votre Android Projet> Propriétés> Options Android> Avancé> = Taille maximale du tas Java.

enter image description here

118
Iain Smith

La réponse choisie me conduit dans la bonne direction, mais pour Visual Studio 2017, l'écran ressemble à:

VS 2017 Updated Screens

VS 2017 Updated Screens

17
mrogunlana

Si vous souhaitez augmenter la taille de segment de mémoire de votre application (pas le processus de génération), vous pouvez définir cela dans votre fichier AndroidManifest.xml:

<application Android:largeHeap="true"></application>
16
Matt

Pour visual studio 2015, cliquez avec le bouton droit de la souris sur Projet -> Propriétés -> Android Options -> Options avancées et taille de segment ici.

12
DavidM

A partir de Xamarin studio version 6.3 et de visual studio 7.0.1, vous pouvez trouver ici la possibilité d’augmenter la taille du segment de mémoire.

Faites un clic droit sur le projet Android puis choisissez les options et choisissez Construire / Android Build , puis Avancé onglet et définir 1G (ou quelque chose) dans taille du segment de mémoire Java

enter image description here

3
Durai Amuthan.H

Lorsque vous manquez de taille de segment 1G, commencez à optimiser les ressources.

Commencez par vérifier si vous ne dupliquez pas les instances d’images, en gardant plusieurs fois la même image en mémoire. Pour cette utilisation, utilisez la bibliothèque ffimageloading ( https://github.com/luberda-molinet/FFImageLoading ) pour le télécharger facilement et rapidement sur un nuget.

Optimisez ensuite les images que vous utilisez. Pour les grandes images, autres que les icônes, essayez de tout convertir en jpeg en évitant les png avec transparence, qui m’avaient autrefois permis de conserver une valeur constante.

Essayez ensuite d’utiliser des vignettes au lieu d’images lorsque vous pouvez avoir de grandes images téléchargées à distance. Sur votre serveur, créez des miniatures pour différentes tailles (mini, petit, moyen, normal, grand, xlarge, etc.) et ne chargez que les images dont vous avez réellement besoin. Cela économise beaucoup de mémoire et de vitesse.

Un autre problème concerne les fuites de mémoire. Il se peut que des cellules ou d’autres éléments résident toujours dans la mémoire s’ils ne se sont pas désabonnés des messages, des gestionnaires d’événements, etc. Imaginez que vous puissiez avoir plusieurs copies d'une liste complète d'images encore en mémoire quand vous êtes certain que cela ne pourrait pas arriver. Plus d'infos ici:

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

3
Nick Kovalsky

D'après mon expérience, les problèmes de mémoire surviennent UNIQUEMENT sur la version Android de l'application Xamarin.Forms. Et elle doit toujours traiter les images de grande taille. J'ai traité ce problème en utilisant FFImageLoading ( https://github.com/luberda-molinet/FFImageLoading )

Remplacez votre

<Image Source="waterfront.jpg" />

Avec

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

Vous constaterez une nette amélioration des performances, qui résoudra également vos problèmes de mémoire.

2
Dylan Liu

J'avais corrigé l'ajout ci-dessous dans la balise d'application de AndroidManifiest.xml

<application  Android:largeHeap="true" Android:label="sample"></application>
0
Divya

Augmenter Java max fonctionne pour moi

enter image description here

0
fulgen