NHibernate哪个caching用于WinForms应用程序

我有一个C#WinForms应用程序与数据库后端(甲骨文)和使用NHibernate的O / R映射。 我想尽可能地减less与数据库的通信,因为这里的networking很慢,所以我读了二级caching。 我发现这个相当不错的介绍 ,其中列出了以下可用的caching实现。

我想知道我应该使用哪个实现

caching应该是简单的,它不应该显着减慢查询的第一次出现,并且不应该花费太多的内存来加载实现程序集。 (使用NHibernate和Castle,应用程序已经占用了80 MB的RAM!)

  • Velocity:使用Microsoft Velocity,这是一个高度可扩展的内存应用程序caching,适用于各种数据。
  • stream行率:使用Bamboo.Prevalence作为caching提供者。 Bamboo.Prevalence是Klaus Wuestefeld在Prevayler中实现的对象stream行概念的.NET实现。 Bamboo.Prevalence为以CLR为目标的确定性系统提供透明的对象持久性。 它为智能客户端应用程序提供持久caching。
  • SysCache:使用System.Web.Caching.Cache作为caching提供者。 这意味着你可以依靠ASP.NETcachingfunction来了解它是如何工作的。
  • SysCache2:类似于NHibernate.Caches.SysCache,使用ASP.NETcaching。 此提供程序还支持SQL依赖关系到期,这意味着可以将某些caching区域configuration为在数据库中的相关数据更改时自动过期。
  • MemCache:使用memcached; memcached是一个高性能,分布式的内存对象caching系统,通常是用于加速dynamicWeb应用程序,通过缓解数据库负载。 基本上是一个分布式哈希表。
  • SharedCache:高性能,分布式和复制的内存对象caching系统。 看到这里和这里的更多信息

我到目前为止的考虑是:

  • 速度似乎相当重量级和过度杀伤(这些文件总共需要467 KB的磁盘空间,还没有测量到目前为止,所需的RAM,因为我没有设法使其运行,见下文)
  • stream行至less在我的第一次尝试中,将查询速度从大约0.5秒减less到大约5秒,cachingfunction无效(见下文)
  • SysCache似乎是ASP.NET,而不是WinForms。
  • MemCache和SharedCache似乎适用于分布式场景。

你会build议我使用哪一个? 还会有一个内置的实现,这当然是非常轻量级的,但引用的文章告诉我,我“ (…)不应该使用此caching提供程序的生产代码,但只能用于testing”

除了最符合我的情况的问题之外,我也遇到了应用问题:

  • Velocity抱怨应用程序configuration文件中没有指定dcacheClient”标签。 在configuration文件中指定有效标记 “,尽pipe我为程序集创build了一个app.config文件,并粘贴了本文中的示例。

  • 如上所述,stream行率大大减慢了我的第一个查询,下一次执行完全相同的查询时,另一个select被发送到数据库。 也许我应该把这个话题“外化”成另一个post。 我会这样做,如果有人告诉我,这是一个查询是非常不寻常的放缓,他需要更多的细节来帮助我。

SysCache仅使用“ASP.NET”缓存,因为它是.NET 2.x / 3.x中包含的唯一一个(.NET 4包含单独的System.Runtime.Caching程序集)

它可以用于桌面应用程序没有任何问题(我现在正在使用它),它几乎不需要配置。

现在,本世纪你的记忆考虑似乎有点小。 过去几年没有一台机器出货少于1GB,大部分机器的容量在2GB到8GB之间,所以80MB本质上是没有的。 我正在写的这个浏览器需要220MB。

缓存的本质就是使用一个资源(通常是内存,在非常特殊的情况下是磁盘)来减少较慢的一个(网络)