代码之家  ›  专栏  ›  技术社区  ›  chiccodoro

nhibernate哪个缓存用于winforms应用程序

  •  11
  • chiccodoro  · 技术社区  · 15 年前

    我有一个带有数据库后端(Oracle)的C WinForms应用程序,并使用nhibernate进行O/R映射。我希望尽可能减少与数据库的通信,因为这里的网络非常慢,所以我阅读了有关二级缓存的内容。我发现 this quite good introduction ,其中列出了以下可用的缓存实现。

    我想知道 我的应用程序应该使用哪个实现 .

    缓存应该是简单的,它不应该显著降低第一次出现查询的速度,也不应该占用太多内存来加载实现程序集。(使用nhibernate和castle,应用程序已占用80 MB的RAM!)

    • Velocity:使用Microsoft Velocity,它是一个可扩展的内存应用程序缓存,用于存储各种数据。
    • 流行:使用竹子。流行作为缓存提供者。竹子流行是普雷维尔的克劳斯·威斯特菲尔德提出的一个对象流行概念的.NET实现。流行为以clr为目标的确定性系统提供了透明的对象持久性。它为智能客户端应用程序提供持久缓存。
    • syscache:使用system.web.caching.cache作为缓存提供程序。这意味着您可以依赖ASP.NET缓存功能来了解它的工作原理。
    • syscache2:类似于nhibernate.caches.syscache,使用ASP.NET缓存。此提供程序还支持基于SQL依赖项的过期,这意味着可以将某些缓存区域配置为在数据库中的相关数据更改时自动过期。
    • memcache:使用memcached;memcached是一个高性能的分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态Web应用程序。基本上是一个分布式哈希表。
    • sharedcache:高性能、分布式和复制的内存对象缓存系统。有关详细信息,请参阅此处和此处

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

    • 速度似乎很重,而且杀伤力也很强(文件总共占用467kb的磁盘空间,因为我没能让它运行,所以还没有测量到所需的RAM,见下文)。
    • 流行,至少在我第一次尝试时,将我的查询从~0.5秒减慢到~5秒,并且缓存不起作用(见下文)。
    • SysCache似乎是用于ASP.NET,而不是用于WinForms。
    • memcache和sharedcache似乎适用于分布式场景。

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

    除了最适合我的情况的问题外,我还面临着应用它们的问题:

    • 速度抱怨说” 在应用程序配置文件中未指定dcacheClient“标记。在配置文件中指定有效标记, “尽管我为程序集创建了一个app.config文件并从 this article .

    • 如上所述,患病率严重降低了我的第一个查询速度,下一次执行完全相同的查询时,另一个select被发送到数据库。也许我应该把这个话题“具体化”到另一篇文章中。我会这样做,如果有人告诉我,一个查询速度太慢是非常不寻常的,他需要更多的细节来帮助我。

    1 回复  |  直到 13 年前
        1
  •  3
  •   Diego Mijelshon    15 年前

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

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

    现在,你对记忆的考虑似乎与这个世纪有点脱节。在过去的几年里,没有一台机器的出货量低于1GB,而且大多数机器的出货量在2GB到8GB之间,所以80MB基本上算不上什么。我写这个的浏览器需要220MB。

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