Getting OutOfMemoryException in Xamarin

时间:2016-04-25 08:48:18

标签: c# visual-studio xamarin xamarin.android

java.lang.OutOfMemoryError. Consider increasing the value of $(JavaMaximumHeapSize). Java ran out of memory while executing 'java.exe'

I am getting out of memory exception in my visualstudio Xamarin Project Please help me how can i resolve this issue.

8 个答案:

答案 0 :(得分:116)

I would increase your build heap size.

Right click your Android Project > Properties > Android Options > Advanced > Java Max Heap Size.

enter image description here

答案 1 :(得分:17)

选择的答案引导我朝着正确的方向前进,但对于Visual Studio 2017,屏幕看起来像:

VS 2017 Updated Screens

VS 2017 Updated Screens

答案 2 :(得分:16)

If you want to increase Heap size of your application (not the build process) you can set this in your AndroidManifest.xml:

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

答案 3 :(得分:12)

对于visual studio 2015,右键单击Project - &gt;属性 - &gt; Android选项 - &gt;那里的高级和堆大小。

答案 4 :(得分:3)

当用完1G堆大小时,开始优化资源。

首先检查您是否没有复制图像实例,将相同图像保留在内存中多次。为此,使用ffimageloading库(https://github.com/luberda-molinet/FFImageLoading)快速轻松地获取它。

然后优化您正在使用的图像。对于除图标之外的大图像,尝试将所有内容转换为jpeg,避免使用透明度的png,这一直是为了保持我的恒定ooms。

如果您在遥控器上有大量上传的图像,请尝试使用缩略图代替图像。在您的服务器上预先创建不同大小的缩略图,迷你,小,中,普通,大,xlarge等,并只加载您真正需要的大小的图像。这节省了大量的内存和速度。

另一个是内存泄漏。如果单元格或其他元素没有取消订阅消息,事件处理程序和其他元素,则可能会将单元格或其他元素保留在内存中。想象一下,当你确定无法发生时,你可以拥有一份完整的图像列表的几份副本。更多信息:

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

答案 5 :(得分:1)

以我的经验,内存问题仅发生在Xamarin.Forms应用的android版本上。而且它总是必须处理大尺寸图像。我已经通过使用FFImageLoading(https://github.com/luberda-molinet/FFImageLoading

处理了这个问题

替换您的

<Image Source="waterfront.jpg" />

使用

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

您将看到性能上的显着提高,这还将解决您的内存问题。

答案 6 :(得分:0)

增加java max heap size对我有用

enter image description here

答案 7 :(得分:0)

我已修复以下在AndroidManifiedt.xml的应用程序标记中添加

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