可以考虑增加 java.lang $(JavaMaximumHeapSize) ‘ java.exe’
我得到了我的视觉工作室 Xamarin 项目的记忆异常请帮助我如何解决这个问题。
我会增加你的构建堆大小。
右键单击你的 Android 项目 > 物业 > Android 选项 > 高级 > 最大堆大小。
如果想增加应用程序的堆大小(而不是构建过程) ,可以在 AndroidManifest.xml 中设置:
<application android:largeHeap="true"></application>
对于 Visual Studio 2015,右键单击项目—— > 属性—— > Android 选项—— > 高级和堆大小。
至于 Xamarin 工作室版本6.3和视觉工作室7.0.1,可以在这里找到增加堆大小的选项
右键单击 android 项目,然后选择 选择,选择 建造/Android Build,然后选择 高级选项卡,在 Java 堆大小中设置 1G(或其他选项)
所选择的答案将我引向正确的方向,但是对于 Visual Studio 2017,屏幕看起来是这样的:
增加 java 的最大堆大小对我有用
当你用完了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/>
您将看到性能的巨大改进,并且它还将解决您的内存问题。