-1

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

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

现在,我想知道:

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

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

谢谢,马特

4

2 回答 2

0

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

Component Store 上的 sqllitenet 可以帮助您解决这个问题。

加上使用 SQLLite 的好处是,那些帮助者..假设他们使用基本的 System.IO,将跨两个平台.. Xamarin.Android 和 Xamarin.IOS。我想序列化在两个平台上都可以工作,你的想法也可以,但我真的认为 SQLLite 实现会更干净..关于内存使用,当你确实需要执行清理时..你用来保存的文件“一切”可能会变大,您必须将其加载到内存中。而使用 SQLLite,您可以查询..找到您需要修改/删除/或同步的相关内容,然后这样做。

我不相信有任何东西可以处理你在 Xamarin 中寻找的东西。除非您使用 Drop Box Sync..

于 2013-08-20T17:58:27.407 回答
0

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

于 2013-08-20T18:13:59.490 回答