NHibernate WinForms 应用程序使用哪个缓存

2024-01-08

我有一个带有数据库后端 (oracle) 的 C# WinForms 应用程序,并使用 NHibernate 进行 O/R 映射。我想尽可能减少与数据库的通信,因为这里的网络非常慢,所以我阅读了有关二级缓存的内容。我发现这个很好的介绍 http://nhibernate.hibernatingrhinos.com/28/first-and-second-level-caching-in-nhibernate,其中列出了以下可用的缓存实现。

我在想我的应用程序应该使用哪种实现.

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

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

到目前为止我的考虑是:

  • Velocity 似乎相当重量级和杀伤力过大(这些文件总共占用了 467 KB 的磁盘空间,到目前为止还没有测量它所占用的 RAM,因为我没有设法让它运行,见下文)
  • 至少在我的第一次尝试中,普遍性将我的查询速度从约 0.5 秒减至约 5 秒,并且缓存不起作用(见下文)
  • SysCache 似乎是针对 ASP.NET 的,而不是针对 winforms 的。
  • MemCache和SharedCache似乎都是针对分布式场景的。

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

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

  • 速度抱怨说“dcacheClient”标签未在应用程序配置文件中指定。在配置文件中指定有效标签,“虽然我为程序集创建了一个 app.config 文件并粘贴了示例本文 http://blogs.circlesource.com/2009/01/20/velocity-usages-and-its-advantages/.

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


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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NHibernate WinForms 应用程序使用哪个缓存 的相关文章

随机推荐

  • 如何停止 SwingWorker?

    我怎样才能阻止SwingWorker做他的工作吗 我知道有cancel 方法 但我最多能做的就是匿名创建一个新的SwingWorker这就是工作 这是供参考的代码 public void mostrarResultado final Res
  • .Net Core 3 Worker 集成测试

    对于集成测试 Asp Net Core 应用程序 我们有Web应用程序工厂 https learn microsoft com en us aspnet core test integration tests view aspnetcore
  • 使用 JNDI 获取 DNS SRV 记录

    我正在尝试使用 JNDI 从 DNS 服务器获取 SRV 记录 Hashtable
  • 哪个更好? Qt Creator 或 Visual Studio IDE [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前在我的 Qt 应用程序中使用 Qt Creator 1 3 我知道它使用jom for make当我们拥有多核处理器时 这一步会更好 但除
  • Twig 标签包含与函数包含

    Twig 的文档标签包括 http twig symfony com doc tags include html看起来非常相似功能包括 http twig symfony com doc functions include html 标签包
  • 如何从java中的JSON文件中删除键值对

    我想知道是否有人可以帮助我或提示我如何用 Java 编辑附加的虚拟 JSON 文件 正如您所看到的 我有一个头对象 其中包含许多遵循相同模式的值和子对象 我想知道是否有办法删除所有值为 1的键 以下是我根据许多网站使用的尝试jackson
  • 根据javascript中的文本行数更改文本区域的高度[重复]

    这个问题在这里已经有答案了 可能的重复 使用原型自动调整文本区域大小 https stackoverflow com questions 7477 autosizing textarea using prototype 如何根据用户放入文本
  • JWT 不记名令牌流程

    我想要的是 ASP NET Core 中 JWT 生成和 JWT 消耗的方法 没有 OAuth2 流程 我确实有 IdentityServerv3 与 OAuth2 配合使用 但当我拥有双方时 对于访问 API 的单个应用程序来说 这有点过
  • Slick Slider slickGoTo 方法打破轮播

    我正在开发一个新闻文章页面 该页面也有一个图像库 我在用着光滑的滑块 http kenwheeler github io slick 用于画廊上的缩略图 图库中的每张图片都有自己的网址 用于广告查看目的 不太好 但我对此无能为力 例如 ou
  • 如何在flutter中定义自定义文本主题?

    如何制作自己的文字主题风格 我只找到这样的默认文本主题 但这还不够 textTheme TextTheme body1 TextStyle body2 TextStyle button TextStyle caption TextStyle
  • Python字典和集合内存分配

    I found 这个优秀的资源 https www safaribooksonline com library view high performance python 9781449361747 ch04 html讨论 python 字典
  • 如何在 Cypress 中存储图像的 src 并将其与另一个图像进行比较?

    测试目标是确认如果用户上传新图像 则上传图像的 src 属性会发生更改 这意味着图像已更改 我尝试使用几种方法 概述如下 第一种方法 cy get img then img gt store the src const source img
  • Chrome 会混淆使用 SVG 格式的网络字体设计的文本(有时)

    Demo http jsbin com onixik 2 http jsbin com onixik 2 内容如下 如果您在 Windows 上的 Chrome 中检查该演示 它可能看起来不错 也可能不太好 我所说的 OK 是指它并不引人注
  • 更改 tkinter 中的输入框背景颜色

    所以我一直在研究这个程序 但我发现很难找出问题所在 我对 tkinter 还很陌生 所以这可能很小 我试图让程序在按下复选按钮时更改输入框的背景颜色 或者更好的是 如果我可以动态地改变它 那就更好了 这是我目前的代码 TodayReadin
  • 在Java中无损JPEG旋转(90/180/270度)?

    是否有一个 Java 库可以以 90 度的增量旋转 JPEG 文件 而不会导致图像质量下降 我找到了这个 http mediachest sourceforge net mediautil http mediachest sourcefor
  • 使用 Azure 管道在特定的自托管服务器上运行

    在 Azure git 中 我正在运行一些自托管代理 它们位于名为 默认 的池中 在 Azure 管道 yml 文件 中 我可以告诉作业它必须在特定代理中运行 如下所示 pool name Default demands Agent Nam
  • 假装电报机器人正在打字?

    如何让机器人假装正在输入消息 当机器人假装打字时 聊天中会出现以下文本 我用的是蟒蛇aiogram https github com aiogram aiogram框架 但对原生 Telegram API 的建议也会有所帮助 我认真建议使用
  • MySQL CSV 导入 - 如果时间戳有毫秒,则日期输入为 0000-00-00 00:00:00?

    我目前有大量 CSV 需要导入到 MySQL 数据库中 这些文件包含每条记录的时间戳 其格式如下 例如 2011 10 13 09 36 02 297000000 我知道 MySQL 错误 8523 它表明不支持在日期时间字段中存储毫秒 尽
  • 如何强制 GCC 假定浮点表达式为非负?

    在某些情况下 您知道某个浮点表达式始终为非负数 例如 当计算向量的长度时 sqrt a 0 a 0 a N 1 a N 1 NB I am意识到std hypot 这与问题无关 并且平方根下的表达式显然是非负的 然而 海湾合作委员会outp
  • NHibernate WinForms 应用程序使用哪个缓存

    我有一个带有数据库后端 oracle 的 C WinForms 应用程序 并使用 NHibernate 进行 O R 映射 我想尽可能减少与数据库的通信 因为这里的网络非常慢 所以我阅读了有关二级缓存的内容 我发现这个很好的介绍 http