2017-08-31 73 views
1

我在Xamarin.Forms应用程序的工作,的ImageSource没有布置和创建OutOfMemoryException异常

在我的页面之一,我有多个自定义StackLayout(ActivityTypeView)包含图像。这些StackLayout是在我的页面中的Grid中创建和添加的。

里面我ActivityTypeView我设置图片来源如下:

WorkIcon.Source = ImageSource.FromFile("disable.png"); 

(我的图像保存在我的绘制文件夹)

的问题是,当我去到另一个网页,回来多在尝试加载图像时,我总是以OutOfMemory异常结束。

我想我的ImageSource不会被销毁/丢弃当我改变页面。因此,在多次重新加载同一页面之后,它总是会出现此错误。

我想知道如何处理这种情况。我该如何正确处置资源以及​​何时处理?

回答

1

我养成了使用FFImageLoadingLibrary的习惯,该功能负责正确缓存和重新使用图像资源。例如,在你的情况下,它会帮助你总是使用相同的内存映像,而不是每次都加载一个新映像,最终导致OutOfMemoryException异常。

您可以简单地将所有Image类替换为CachedImage,并设置相当多的控制缓存,缩减采样和其他内容的属性。这里是文档:Xamarin.Forms API

+0

使用FFImageLoadingLibrary修复了我的崩溃!我想使用Xamarin分析器来查看内存发生了什么,但我不拥有Visual Studio Enterprise来监视我的应用程序。 你知道内存是否在某个时候被释放?或者图书馆只是在应用程序运行时缓存图片? –

+0

@LucienMoor很高兴听到!在我的情况下,图书馆将图像加载到内存一次,并重复使用它。这样我们就不必担心内存被释放了。你会注意到从长远来看使用这个库是非常值得的。 – hankide

1

我不确定你的图像是大的,但如果是,你不应该加载整个图像文件到内存中。 Here是一种使用imageview边界加载图像的方法。这是为Android,但肯定有相当于Xamarin.Forms

+0

我的图像不是那么大,但调整图像大小可能会有所帮助!在接受的答案中提出的图书馆允许我们这样做! –