java.lang.OutOfMemoryError。考虑增加$(JavaMaximumHeapSize)的值。Java执行'java.exe'时内存不足
我的visualstudio Xamarin项目中的内存不足异常。请帮助我如何解决此问题。
Answers:
android:largeHeap="true"
标签,然后观察您logcat
是否Grow heap (frag case)
看到ART试图分配更多内存
对于Visual Studio 2015,右键单击项目->属性-> Android选项->高级,然后在其中堆大小。
当1G堆大小用完时,开始优化资源。
首先检查您是否不复制图像实例,将同一图像保留在内存中几次。为此,使用ffimageloading库(https://github.com/luberda-molinet/FFImageLoading)在nuget上快速便捷地获取它。
然后优化您正在使用的图像。对于除图标以外的大图像,请尝试将所有内容都转换为jpeg,避免使用具有透明度的png,这曾经为我节省了恒定的缩放比例。
然后,当您在遥控器上可能有较大的上载图像时,请尝试使用缩略图而不是图像。在您的服务器上,预先为不同大小的缩略图创建缩略图,这些缩略图包括mini,small,medium,normal,large,xlarge等,并且仅加载您真正需要的尺寸的图像。这样可以节省大量内存和速度。
另一个是内存泄漏。如果单元格或其他元素没有取消订阅消息,事件处理程序和其他一些元素,则它们可能仍驻留在内存中。想象一下,当您确定不可能发生时,可能有几张完整的图像列表仍在内存中。更多信息在这里:
https://forums.xamarin.com/discussion/123876/should-we-unsubscribe-all-events-for-memory-management
以我的经验,内存问题仅发生在Xamarin.Forms应用的android版本上。而且它总是必须处理大尺寸图像。我已经通过使用FFImageLoading(https://github.com/luberda-molinet/FFImageLoading)处理了这个问题
更换您的
<Image Source="waterfront.jpg" />
用
<ffimageloading:CachedImage Source="waterfront.jpg"
DownsampleToViewSize = true,
BitmapOptimizations = true/>
您将看到性能上的显着提高,并且还将解决您的内存问题。