Monotouch / Monodroid - 在高清上缓存图像/文件+检查服务器端是否已更改

时间:2013-08-20 17:30:04

标签: c# .net xamarin.ios mono xamarin.android

为了创造更好的用户体验,我想在智能手机的高清上缓存图像(或其他文件,如文本文件)。我将实现的一些功能:

  • 定义缓存大小的选项(如果缓存太大,删除例如最旧的文件,直到它低于缓存限制的90%左右)
  • 删除X天未访问过的文件
  • 在线检查文件是否已更改。目前我正在考虑在线检索文件的文件大小并将其与本地文件进行比较(如果更新文件,我认为只有一个小的变化,文件大小完全相同)。

现在,我想知道:

  • 是否已经存在可以处理此问题的框架?谷歌找不到任何东西。我确实为iOS找到了一些像AFNetworking的东西,但我更喜欢跨平台代码(我也不知道AFNetworking能否做到这样的事情)
  • 我也找到类似ASIDownloadCache的东西:在这种情况下,他们询问服务器文件是否自X以来被修改过。我看到我可以在C#中用myHttpWebResponse.LastModified做类似的事情。这对于静态文件是否可靠?
  • 如何在本地文件路径上映射URL? (见下文)

为了映射本地文件(在缓存中)的URL,我只想在某处定义“缓存”文件夹,并将文件添加到“缓存/”+“URL”位置(没有http的URL) ://部分)。然后检查文件是否已经缓存非常简单。我也可以使用一个字典并将其加载到内存中,但是我需要序列化它并且我不确定它是否会在有大量条目时增加或减少性能。

谢谢, 马特

2 个答案:

答案 0 :(得分:0)

您可以使用SQLLite而不是序列化对象,这将导致一组更可靠的静态方法/函数,用于跟踪您下拉的内容,发生的日期,文件的路径等。以及他们保留在本地设备上的Cache的首选项。

组件商店中的sqllitenet可以帮助您。

另外,使用SQLLite的好处就是那些助手......假设他们使用的是基本的System.IO,会跨越两个平台.Xamarin.Android和Xamarin.IOS。我认为序列化可以在两个平台上运行,你的想法会起作用,但我真的认为SQLLite实现会更清晰..在内存使用方面,当你确实需要执行清理时..你用来保存的那个文件“一切“可能会变大,你必须将它加载到内存中..而使用SQLLite,你可以查询..找到你需要修改/删除/或同步的相关内容,并这样做。

我不相信在Xamarin中还有什么可以处理你正在寻找的东西。除非你正在使用Drop Box Sync ..

答案 1 :(得分:0)

Redth有一个缓存图像存储 - https://github.com/Redth/MonoTouch.UrlImageStore - 类似的东西(可能是相同的代码)包含在MonoTouch.Dialog中。