Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.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
C# Xamarin-如何正确处理位图?_C#_Android_Caching_Bitmap_Xamarin - Fatal编程技术网

C# Xamarin-如何正确处理位图?

C# Xamarin-如何正确处理位图?,c#,android,caching,bitmap,xamarin,C#,Android,Caching,Bitmap,Xamarin,我是应用程序开发新手,遇到了一些困难。我有一种方法,可以从服务器下载图像,然后将其转换为位图,以便将其分配给ImageView。问题是,如果我调用它超过10次,应用程序就会崩溃,出现OutOfMemory异常。我尝试使用Dispose()删除旧位图,但效果不理想。有办法解决这个问题吗? 代码: /。。。 字符串url=deviceModel.LastPhotoLink; 位图imageBitmap=等待新的ImageDownloader().GetImageBitmapFromUrlAsync(

我是应用程序开发新手,遇到了一些困难。我有一种方法,可以从服务器下载图像,然后将其转换为位图,以便将其分配给ImageView。问题是,如果我调用它超过10次,应用程序就会崩溃,出现
OutOfMemory
异常。我尝试使用
Dispose()
删除旧位图,但效果不理想。有办法解决这个问题吗? 代码:

/。。。
字符串url=deviceModel.LastPhotoLink;
位图imageBitmap=等待新的ImageDownloader().GetImageBitmapFromUrlAsync(url,活动);
lastPhoto.SetImageBitmap(图像位图);
Dispose();
/...
公共异步任务GetImageBitmapFromUrlAsync(字符串url,上下文){
WebClient客户端=新的WebClient();
iSharedReferences pref=context.getSharedReferences(“UserSession”,FileCreationMode.Private);
字符串cookie=pref.GetString(“PHPSESSID”,string.Empty);
client.Headers.Add(HttpRequestHeader.Cookie,“PHPSESSID=“+Cookie”);
var imageBytes=wait Task.Run(()=>client.DownloadData(url));
位图imageBitmap=wait Task.Run(()=>BitmapFactory.DecodeByteArray(imageBytes,0,imageBytes.Length));
返回图像位图;
}

调用Dispose()后,是否有任何对象引用位图?对对象调用dispose不能保证释放所有内存,您仍然必须删除引用,以便垃圾收集器能够完成其工作

相关章节:

调用Dispose后,必须释放对映像的所有引用,以便 垃圾回收器可以回收映像所在的内存 占据。有关详细信息,请参阅清理非托管资源 以及实现一种处置方法


调用Dispose()后是否有任何对象引用位图?对对象调用dispose不能保证释放所有内存,您仍然必须删除引用,以便垃圾收集器能够完成其工作

相关章节:

调用Dispose后,必须释放对映像的所有引用,以便 垃圾回收器可以回收映像所在的内存 占据。有关详细信息,请参阅清理非托管资源 以及实现一种处置方法


我想没有,我想没有。
/...
string url = deviceModel.LastPhotoLink;
Bitmap imageBitmap = await new ImageDownloader().GetImageBitmapFromUrlAsync(url, Activity);
lastPhoto.SetImageBitmap(imageBitmap);
imageBitmap.Dispose();
/...

public async Task<Bitmap> GetImageBitmapFromUrlAsync(string url, Context context) {
     WebClient client = new WebClient();
     ISharedPreferences pref = context.GetSharedPreferences("UserSession", FileCreationMode.Private);
     string cookie = pref.GetString("PHPSESSID", string.Empty);
     client.Headers.Add(HttpRequestHeader.Cookie, "PHPSESSID=" + cookie);
     var imageBytes = await Task.Run(() => client.DownloadData(url));
     Bitmap imageBitmap = await Task.Run(() => BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length));

return imageBitmap;
}