在Xamarin中获取OutOfMemoryException

问题描述 投票:65回答:9

java.lang.OutOfMemoryError。考虑增加$(JavaMaximumHeapSize)的值。 Java执行'java.exe'时内存不足

我在visualstudio Xamarin项目中出现内存异常请帮助我如何解决此问题。

c# visual-studio xamarin xamarin.android
9个回答
117
投票

我会增加你的构建堆大小。

右键单击Android项目>属性> Android选项>高级> Java最大堆大小。

enter image description here


17
投票

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

VS 2017 Updated Screens

VS 2017 Updated Screens


16
投票

如果要增加应用程序的堆大小(而不是构建过程),可以在AndroidManifest.xml中设置:

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

12
投票

对于Visual Studio 2015,右键单击项目 - >属性 - > Android选项 - >高级和堆大小。


3
投票

从Xamarin studio版本6.3和visual studio 7.0.1开始,可以在此处找到增加堆大小的选项

右键单击android项目然后选择选项并选择Build / Android Build,然后选择Advanced选项卡并在Java堆大小中设置1G(或其他东西)

enter image description here


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


1
投票

根据我的经验,内存问题只发生在Android版的Xamarin.Forms应用程序上。它总是要处理大尺寸图像。我通过使用FFImageLoading(https://github.com/luberda-molinet/FFImageLoading)解决了这个问题

替换你的

<Image Source="waterfront.jpg" />

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

您将看到性能的显着改善,它也将解决您的内存问题。


0
投票

增加java max heap size对我有用

enter image description here


0
投票

我在AndroidManifiest.xml的应用程序标签中修改了以下内容

<application  android:largeHeap="true" android:label="sample"></application>
© www.soinside.com 2019 - 2024. All rights reserved.