Xamarin 异常

可以考虑增加 java.lang $(JavaMaximumHeapSize) ‘ java.exe’

我得到了我的视觉工作室 Xamarin 项目的记忆异常请帮助我如何解决这个问题。

38096 次浏览

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

右键单击你的 Android 项目 > 物业 > Android 选项 > 高级 > 最大堆大小

enter image description here

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

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

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

至于 Xamarin 工作室版本6.3和视觉工作室7.0.1,可以在这里找到增加堆大小的选项

右键单击 android 项目,然后选择 选择,选择 建造/Android Build,然后选择 高级选项卡,在 Java 堆大小中设置 1G(或其他选项)

enter image description here

所选择的答案将我引向正确的方向,但是对于 Visual Studio 2017,屏幕看起来是这样的:

VS 2017 Updated Screens

VS 2017 Updated Screens

增加 java 的最大堆大小对我有用

enter image description here

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

首先检查是否没有复制图像实例,在内存中多次保留相同的图像。为此,使用 ffimage 加载库(https://github.com/luberda-molinet/FFImageLoading)快速、简单地获得它。

然后优化您正在使用的图像。对于大图像,除了图标,尝试将所有内容都转换为 jpeg,避免使用透明的 png,这曾经为我节省了不断变换的时间。

然后尝试使用缩略图而不是图像时,您可能有大上传的图像在远程。在您的服务器上预先创建不同大小的缩略图,迷你,小,中等,正常,大,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

我在 AndroidManifiest.xml 的应用程序标记中修复了下面的添加

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

根据我的经验,内存问题只会发生在 Xamarin 的机器人版本上。表格应用程序。它总是要处理大尺寸的图像。我已经使用 FFImageLoading(https://github.com/luberda-molinet/FFImageLoading)处理了这个问题

替换你的

<Image Source="waterfront.jpg" />

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

您将看到性能的巨大改进,并且它还将解决您的内存问题。