gpt4 book ai didi

c# - NHibernate 哪个缓存用于 WinForms 应用程序

转载 作者:可可西里 更新时间:2023-11-01 12:40:16 24 4
gpt4 key购买 nike

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

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

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

  • Velocity: uses Microsoft Velocity which is a highly scalable in-memory application cache for all kinds of data.
  • Prevalence: uses Bamboo.Prevalence as the cache provider. Bamboo.Prevalence is a .NET implementation of the object prevalence concept brought to life by Klaus Wuestefeld in Prevayler. Bamboo.Prevalence provides transparent object persistence to deterministic systems targeting the CLR. It offers persistent caching for smart client applications.
  • SysCache: Uses System.Web.Caching.Cache as the cache provider. This means that you can rely on ASP.NET caching feature to understand how it works.
  • SysCache2: Similar to NHibernate.Caches.SysCache, uses ASP.NET cache. This provider also supports SQL dependency-based expiration, meaning that it is possible to configure certain cache regions to automatically expire when the relevant data in the database changes.
  • MemCache: uses memcached; memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load. Basically a distributed hash table.
  • SharedCache: high-performance, distributed and replicated memory object caching system. See here and here for more info

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

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

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

除了最适合我的情况的问题外,我在应用它们时也遇到了问题:

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

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

最佳答案

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

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

现在,您对内存的考虑似乎与本世纪有些偏差。在过去的几年里,没有一台机器的容量低于 1GB,大多数都在 2GB 到 8GB 之间,所以 80MB 基本上算不了什么。我正在使用的浏览器需要 220MB。

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

关于c# - NHibernate 哪个缓存用于 WinForms 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3068019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com