Подтвердить что ты не робот

Получение OutOfMemoryException в Xamarin

java.lang.OutOfMemoryError. Рассмотрим увеличение значения $(JavaMaximumHeapSize). У Java закончилась нехватка памяти при выполнении 'Java.exe'

Я получаю исключение из памяти в моем проекте Visual Studio Xamarin. Пожалуйста, помогите мне, как я могу решить эту проблему.

4b9b3361

Ответ 1

Я бы увеличил размер кучи сборки.

Щелкните правой кнопкой мыши свой проект Android > Свойства > Параметры Android > Дополнительно > Максимальный размер кучи Java.

введите описание изображения здесь

Ответ 2

Выбранный ответ ведет меня в правильном направлении, но для Visual Studio 2017 экран выглядит следующим образом:

VS 2017 Updated Screens

VS 2017 Updated Screens

Ответ 3

Если вы хотите увеличить размер кучи вашего приложения (а не процесс сборки), вы можете установить его в своем AndroidManifest.xml:

<application android:largeHeap="true"></application>

Ответ 4

Для визуальной студии 2015 щелкните правой кнопкой мыши Project → Properties → Android Options → Расширенный и размер кучи.

Ответ 5

Как и в Xamarin studio версии 6.3 и visual studio 7.0.1, возможность увеличения размера кучи можно найти здесь.

Щелкните правой кнопкой мыши на проекте Android, затем выберите параметры и выберите "Build/Android Build", затем вкладку "Дополнительно" и установите 1G (или что-то еще) в размере кучи Java

введите описание изображения здесь

Ответ 6

Когда вы исчерпаете размер кучи 1G, начните оптимизировать ресурсы.

Сначала проверьте, не копируете ли вы экземпляры изображений, сохраняя одно и то же изображение в памяти несколько раз. Для этого используйте библиотеку ffimageloading (https://github.com/luberda-molinet/FFImageLoading), чтобы получить ее быстро и легко.

Затем оптимизируйте изображения, которые вы используете. Для больших изображений, кроме значков, попробуйте преобразовать все в формат JPEG, избегая png с прозрачностью, которая когда-то сохраняла меня для постоянных чисел.

Затем попробуйте использовать миниатюры вместо изображений, если у вас могут быть большие загруженные изображения на пульте дистанционного управления. На вашем сервере предварительно создайте миниатюры для разных размеров, мини, маленькие, средние, нормальные, большие, большие и т.д., И загружайте только те изображения, которые вам действительно нужны. Это экономит много памяти и скорости.

Еще один - утечки памяти. У вас могут быть ячейки или другие элементы, которые все еще находятся в памяти, если они не отписались от сообщений, обработчиков событий и некоторых других. Представьте, что у вас может быть несколько копий списка, полного изображений, все еще находящихся в памяти, когда вы уверены, что этого не произойдет. Больше информации здесь:

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

Ответ 7

Увеличение размера кучи java max для меня работает

введите описание изображения здесь

Ответ 8

Я исправил добавление ниже в тег приложения AndroidManizest.xml

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

Ответ 9

По моему опыту, проблемы с памятью возникают ТОЛЬКО в версии Android приложения Xamarin.Forms. И это всегда приходится иметь дело с крупногабаритными изображениями. Я справился с этой проблемой с помощью FFImageLoading (https://github.com/luberda-molinet/FFImageLoading)

Замените свой

<Image Source="waterfront.jpg" />

С

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

Вы увидите резкое улучшение производительности, а также это решит проблемы с памятью.