Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ImageSource未释放,正在创建OutOfMemoryException_Image_Xamarin_Xamarin.forms_Imagesource - Fatal编程技术网

ImageSource未释放,正在创建OutOfMemoryException

ImageSource未释放,正在创建OutOfMemoryException,image,xamarin,xamarin.forms,imagesource,Image,Xamarin,Xamarin.forms,Imagesource,我在做Xamarin.表格申请 在我的一个页面中,我有多个自定义StackLayout(ActivityTypeView),其中包含一个图像。这些StackLayout是在“我的页面”的网格中创建和添加的Dynamicly 在ActivityTypeView中,我将图像源设置为: WorkIcon.Source = ImageSource.FromFile("disable.png"); (我的图像保存在我的可绘制文件夹中) 问题是,当我转到另一个页面并多次返回时,在尝试加载图像时,我总是在某

我在做Xamarin.表格申请

在我的一个页面中,我有多个自定义StackLayout(ActivityTypeView),其中包含一个图像。这些StackLayout是在“我的页面”的网格中创建和添加的Dynamicly

在ActivityTypeView中,我将图像源设置为:

WorkIcon.Source = ImageSource.FromFile("disable.png");
(我的图像保存在我的可绘制文件夹中)

问题是,当我转到另一个页面并多次返回时,在尝试加载图像时,我总是在某个时刻出现OutOfMemory异常

我想当我换页时,我的图像源并没有被销毁。因此,在我多次重新加载同一页面后,它总是以这个错误结束


我想知道如何处理这种情况。如何正确处理ressource以及何时处理?

我养成了使用的习惯,即正确缓存和重用图像资源。例如,在您的情况下,它将帮助您始终使用相同的内存中映像,而不是每次加载新映像,最终导致OutOfMemoryException


您可以简单地用CacheDiImage替换所有图像类,并设置相当多的属性来控制缓存、下采样和其他事情。以下是文档:

我不确定您的图像是否较大,但如果较大,则不应将整个图像文件加载到内存中。”这是一种使用imageview的边界加载图像的方法。它适用于android,但肯定有一个与Xamarin相当的版本。使用FFImageLoadingLibrary的表单修复了我的崩溃!我想使用Xamarin profiler来查看内存发生了什么,但我并没有自己的Visual Studio Enterprise来监视我的应用程序。你知道内存是否在某个时候被释放了吗?或者在应用程序运行时库只是缓存图像?@LucienMoor很高兴听到这个!在我的例子中,库将图像加载到内存中一次,并反复重用它。这样我们就不必担心内存被释放了。您会注意到,从长远来看,使用该库是非常值得的。我的图像没有那么大,但调整图像大小可能会有所帮助!接受答案中提出的图书馆允许我们这样做!