NHibernate用于WinForms应用程序的缓存

时间:2010-06-18 08:05:33

标签: c# windows nhibernate caching

我有一个带有数据库后端(oracle)的C#WinForms应用程序,并使用NHibernate进行O / R映射。我想尽可能减少与数据库的通信,因为这里的网络很慢,所以我读到了二级缓存。我找到了this quite good introduction,它列出了以下可用的缓存实现。

我想知道我应该为我的应用程序使用哪种实现

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

  
      
  • Velocity:使用Microsoft Velocity,它是一种高度可扩展的内存应用程序缓存,适用于各种数据。
  •   
  • 普遍性:使用Bamboo.Prevalence作为缓存提供者。 Bamboo.Prevalence是由Prevayler的Klaus Wuestefeld带来的对象流行概念的.NET实现。 Bamboo.Prevalence为定位CLR的确定性系统提供透明对象持久性。它为智能客户端应用程序提供持久缓存。
  •   
  • SysCache:使用System.Web.Caching.Cache作为缓存提供程序。这意味着您可以依赖ASP.NET缓存功能来了解它的工作原理。
  •   
  • SysCache2:与NHibernate.Caches.SysCache类似,使用ASP.NET缓存。此提供程序还支持基于SQL依赖性的过期,这意味着可以将某些缓存区域配置为在数据库中的相关数据发生更改时自动过期。
  •   
  • MemCache:使用memcached; memcached是一种高性能的分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态Web应用程序。基本上是分布式哈希表。
  •   
  • SharedCache:高性能,分布式和复制的内存对象缓存系统。有关详细信息,请参阅此处和此处
  •   

到目前为止,我的考虑是:

  • 速度似乎非常重量级和过度杀伤(文件总共需要467 KB的磁盘空间,到目前为止还没有测量到它所需的RAM,因为我没有设法让它运行,见下文)
  • 至少在我的第一次尝试中,流行率将我的查询从约0.5秒减慢到约5秒,并且缓存不起作用(见下文)
  • SysCache似乎适用于ASP.NET,而不适用于winforms。
  • MemCache和SharedCache似乎适用于分布式场景。

你建议我使用哪一个?还有一个内置的实现,当然它非常轻量级,但引用的文章告诉我,我“(。 ..)绝不应该将此缓存提供程序用于生产代码,而只应用于测试。“

除了最符合我情况的问题外,我还遇到了应用它们的问题:

  • Velocity抱怨在应用程序配置文件中未指定“ dcacheClient”标记。在配置文件中指定有效标记,“虽然我为程序集创建了一个app.config文件并粘贴了this article中的示例。

  • 如上所述,普遍性严重降低了我的第一个查询速度,下次执行完全相同的查询时,另一个选择被发送到数据库。也许我应该将这个话题“外化”到另一篇文章中。如果有人告诉我,查询速度太慢而且需要更多详细信息来帮助我,我会这样做。

1 个答案:

答案 0 :(得分:3)

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

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

现在,你的记忆考虑似乎与本世纪有点不同。在过去的几年里,没有机器的出货量低于1GB,大多数都有2GB到8GB,所以80MB基本上没什么。我写这篇文章的浏览器需要220MB。

缓存的本质是关于使用资源(通常是内存,在特定情况下的磁盘)来减少较慢的(网络)的使用