繁体   English   中英

NHibernate用于WinForms应用程序的缓存

[英]NHibernate which cache to use for WinForms application

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

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

缓存应该很简单,它不应该显着减慢第一次出现的查询,并且它不应占用很多内存来加载实现程序集。 (使用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文件并粘贴了本文中的示例。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM