维护本地资产缓存

时间:2010-11-16 16:06:04

标签: c# .net wpf resources

我正在编写一个GUI远程客户端,服务器定义并执行屏幕,一个小的GUI应用程序在客户端上可视化。我知道这听起来很像一个网站,这个系统会有一个Web客户端,但是现在我专注于WPF客户端实现。

这个系统的一部分是我需要在服务器和客户端之间同步资产。服务器将所有资产存储在.zip文件中或作为文件系统上的目录结构存储;我还没有决定。这些资产可能会发生变化:可能会添加,删除或修改资产。这些修改需要与客户端同步。

我遇到的问题是如何在客户端上存储这些资产。我已经提出了以下要求:

  • 资产通过类似路径的键控(例如Images/Icons/16/add.png);

  • 每个资产必须维护CRC32以检测chagnes;

  • 大约有100到200个资产;

  • 资产的大小介于1 KB到500 KB之间(只有一两个);中等大小为8 KB;主要是.png图像文件;

  • 由于已加载的资产将缓存在内存中,因此检索不一定非常快;

  • 由于资产不会经常更改,因此更新本地缓存不一定非常快。

我想到了以下方法:

  • 光盘上的文件。这具有以下优势:

    • 易于实施;

    • 快速更新和检索;

    以下缺点:

    • 光盘上的“某处”有很多文件;

    • 无法存储元数据(CRC32);

  • 将文件存储在.zip文件中。这具有以下优势:

    • 良好定义的存储机制,具有良好的.NET支持;

    • 为我维护CRC32(我相信);

    以下缺点:

    • 随机文件的更新和检索相对较慢(我相信);

    • 无法存储额外的元数据(不知道我是否需要这个);

  • 将文件存储在SQLite数据库中。这具有以下优点:

    • 良好定义的存储机制,具有良好的.NET支持;

    • 允许存储所有类型的元数据;

    • 快速更新和检索随机文件;

    以下缺点:

    • 可能完全矫枉过正;

    • 我担心SQLite的二进制支持。

我的问题是1.我是否忽略了一个明显的替代方案和/或2.哪种方法最好。

2 个答案:

答案 0 :(得分:0)

就个人而言,我会选择SQLLite(或MySql,它是开源的,免费的)。

根据我的经验,即使是小型应用程序也可以成长为大型应用程序,您会很高兴您使用了正确的技术,即使它在开始时过于矫枉过正。

答案 1 :(得分:0)

参加KISS方法:只需将整个资源文件下载到客户端。

资源库不会那么大,1 MB到2 MB。可以使用单个哈希检查整个.zip文件的更改,并仅在更改时更新。由于这不会经常发生(最多每月一次),这不会是一个问题。