Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/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
Image 将映像缓存到磁盘_Image_File_Caching_Process_Xamarin - Fatal编程技术网

Image 将映像缓存到磁盘

Image 将映像缓存到磁盘,image,file,caching,process,xamarin,Image,File,Caching,Process,Xamarin,我正在编写一个Xamarin应用程序,从web上检索图像并将其加载到GridView中。我不希望每次都下载一张图片,而是希望加快这个过程。我想我需要缓存图像 缓存基本上只是将图像保存到一个文件中,当需要显示图像时,从文件而不是从web检索图像吗 以下各项是否正确: 检查本地文件是否存在 检查本地文件是否与web文件大小相同 如果大小不同,请从web上获取并保存新文件,然后加载新文件 如果大小相同,请加载本地保存的文件 过程就这么简单吗?是否有一个设计模式或教程可以解释所有需要做的事情 提前感谢为

我正在编写一个Xamarin应用程序,从web上检索图像并将其加载到GridView中。我不希望每次都下载一张图片,而是希望加快这个过程。我想我需要缓存图像

缓存基本上只是将图像保存到一个文件中,当需要显示图像时,从文件而不是从web检索图像吗

以下各项是否正确:

  • 检查本地文件是否存在
  • 检查本地文件是否与web文件大小相同
  • 如果大小不同,请从web上获取并保存新文件,然后加载新文件
  • 如果大小相同,请加载本地保存的文件
  • 过程就这么简单吗?是否有一个设计模式或教程可以解释所有需要做的事情


    提前感谢

    为了有效缓存图像,您从中下载图像的服务器需要支持一个协议来帮助您进行缓存。web缓存最常用的标准协议之一是
    ETag

    下面是它的工作原理:

    1) 您从中请求图像

    2) 服务器用图像进行响应,在响应头中,将有某个标识符的
    ETag
    值:abc123

    3) 将图像和ETag值保存到本地存储器

    4) 下次从同一URL请求图像时,将传递一个新的头<代码>如果没有与abc123保存的ETag值匹配


    5) 如果图像或内容没有更改,则服务器将响应状态代码
    304 Not Modified
    ,您只需显示您在本地保存的图像。如果映像已更改,服务器将以状态代码200和新的ETag值进行响应,然后您可以像平常一样下载映像以替换缓存副本。

    基本上就是这样。不过,我会比较图像的日期,而不是大小(HTTP对此进行了很好的调整)。如果你想让它成为线程安全的,也要注意同步。我正在考虑使用一些来自用户资源的异步加载代码。你有什么建议我应该明确调查吗?我现在正在看ImageLoader。如果你说的是Android资源,为什么不使用Android资源机制呢?如果它不够平滑,则在任务中启动它,从资源加载图像,然后在UI线程中分配它。HTTP还具有诸如“Expires”和“Max Age”之类的附加头,允许客户端在一段时间内使用缓存图像,而不必像Mike在上面的步骤4和5中概述的那样执行条件提取。