Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# 维护本地资产缓存_C#_.net_Wpf_Resources - Fatal编程技术网

C# 维护本地资产缓存

C# 维护本地资产缓存,c#,.net,wpf,resources,C#,.net,Wpf,Resources,我正在编写一个GUI远程处理客户端,服务器在其中定义并执行屏幕,一个小型GUI应用程序在客户端上将其可视化。我知道这听起来很像一个网站,这个系统将有一个web客户端,但现在我主要关注WPF客户端的实现 这个系统的一部分是我需要在服务器和客户端之间同步资产。服务器将所有资产存储在.zip文件中或作为文件系统上的目录结构;我还没决定。这些资产可能会发生变化:资产可能会被添加、删除或修改。这些修改需要与客户端同步 我遇到的问题是如何在客户机上存储这些资产。我提出了以下要求: 资产通过类似路径的键设置关

我正在编写一个GUI远程处理客户端,服务器在其中定义并执行屏幕,一个小型GUI应用程序在客户端上将其可视化。我知道这听起来很像一个网站,这个系统将有一个web客户端,但现在我主要关注WPF客户端的实现

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

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

资产通过类似路径的键设置关键帧,例如图像/图标/16/add.png

必须为每项资产维护CRC32,以检测chagnes

大约有100到200个资产

资产的大小将在1 KB到500 KB之间,只有一个或两个;中等大小为8KB;主要是.png图像文件

由于加载的资产将被缓存在内存中,所以检索不必非常快

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

我想出了以下方法:

光盘上的文件。这有以下优点:

易于实施

快速更新和检索

还有以下缺点:

光盘上的许多文件

无法存储元数据CRC32

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

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

我相信为我维护一个CRC32

还有以下缺点:

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

不可能存储额外的元数据,但我不知道我是否需要它

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

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

允许存储各种元数据

快速更新和检索随机文件

还有以下缺点:

可能是完全过火了

我担心SQLite的二进制支持


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

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

根据我的经验,即使是小的应用程序也有一种成长为大的应用程序的方式,你会很高兴你使用了正确的技术,即使在一开始它有点过分。

采用了KISS方法:只需将整个资源文件下载到客户端


资源库不会那么大,从1MB到2MB。整个.zip文件可以通过一个散列检查更改,并且仅在更改时更新。由于这种情况每月最多不会发生一次,因此这不会是一个问题。

此客户端背后的整个理念是使功能绝对最少。它就像一个最小的浏览器或TTY客户端putty,安装需要保持在绝对最小值,比如1MB,没有依赖项。这是一个要求,它不能成长为一个大型应用程序。哦,我明白了。您还可以考虑安装MS Access运行时。这是一个相当小的占地面积,提供了一个像样的关系数据库。不确定这是否会将您推到1mb以上。