Ответ 1
Я бы увеличил размер кучи сборки.
Щелкните правой кнопкой мыши свой проект Android > Свойства > Параметры Android > Дополнительно > Максимальный размер кучи Java.
java.lang.OutOfMemoryError. Рассмотрим увеличение значения $(JavaMaximumHeapSize). У Java закончилась нехватка памяти при выполнении 'Java.exe'
Я получаю исключение из памяти в моем проекте Visual Studio Xamarin. Пожалуйста, помогите мне, как я могу решить эту проблему.
Я бы увеличил размер кучи сборки.
Щелкните правой кнопкой мыши свой проект Android > Свойства > Параметры Android > Дополнительно > Максимальный размер кучи Java.
Выбранный ответ ведет меня в правильном направлении, но для Visual Studio 2017 экран выглядит следующим образом:
Если вы хотите увеличить размер кучи вашего приложения (а не процесс сборки), вы можете установить его в своем AndroidManifest.xml:
<application android:largeHeap="true"></application>
Для визуальной студии 2015 щелкните правой кнопкой мыши Project → Properties → Android Options → Расширенный и размер кучи.
Как и в Xamarin studio версии 6.3 и visual studio 7.0.1, возможность увеличения размера кучи можно найти здесь.
Щелкните правой кнопкой мыши на проекте Android, затем выберите параметры и выберите "Build/Android Build", затем вкладку "Дополнительно" и установите 1G (или что-то еще) в размере кучи Java
Когда вы исчерпаете размер кучи 1G, начните оптимизировать ресурсы.
Сначала проверьте, не копируете ли вы экземпляры изображений, сохраняя одно и то же изображение в памяти несколько раз. Для этого используйте библиотеку ffimageloading (https://github.com/luberda-molinet/FFImageLoading), чтобы получить ее быстро и легко.
Затем оптимизируйте изображения, которые вы используете. Для больших изображений, кроме значков, попробуйте преобразовать все в формат JPEG, избегая png с прозрачностью, которая когда-то сохраняла меня для постоянных чисел.
Затем попробуйте использовать миниатюры вместо изображений, если у вас могут быть большие загруженные изображения на пульте дистанционного управления. На вашем сервере предварительно создайте миниатюры для разных размеров, мини, маленькие, средние, нормальные, большие, большие и т.д., И загружайте только те изображения, которые вам действительно нужны. Это экономит много памяти и скорости.
Еще один - утечки памяти. У вас могут быть ячейки или другие элементы, которые все еще находятся в памяти, если они не отписались от сообщений, обработчиков событий и некоторых других. Представьте, что у вас может быть несколько копий списка, полного изображений, все еще находящихся в памяти, когда вы уверены, что этого не произойдет. Больше информации здесь:
https://forums.xamarin.com/discussion/123876/should-we-unsubscribe-all-events-for-memory-management
Увеличение размера кучи java max для меня работает
Я исправил добавление ниже в тег приложения AndroidManizest.xml
<application android:largeHeap="true" android:label="sample"></application>
По моему опыту, проблемы с памятью возникают ТОЛЬКО в версии Android приложения Xamarin.Forms. И это всегда приходится иметь дело с крупногабаритными изображениями. Я справился с этой проблемой с помощью FFImageLoading (https://github.com/luberda-molinet/FFImageLoading)
Замените свой
<Image Source="waterfront.jpg" />
С
<ffimageloading:CachedImage Source="waterfront.jpg"
DownsampleToViewSize = true,
BitmapOptimizations = true/>
Вы увидите резкое улучшение производительности, а также это решит проблемы с памятью.