首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个MemoryCache实例

使用多个MemoryCache实例
EN

Stack Overflow用户
提问于 2011-12-11 12:32:23
回答 2查看 27.8K关注 0票数 76

我希望使用System.Runtime.Caching命名空间向我的应用程序添加缓存功能,并且可能希望在几个地方和不同的上下文中使用缓存。为此,我想使用几个MemoryCache实例。

但是,我看到这里不鼓励使用多个MemoryCache实例:

MemoryCache不是单一实例,但是您应该只创建几个或可能只创建一个MemoryCache实例,缓存项的代码应该使用这些实例。

多个MemoryCache实例将如何影响我的应用程序?我觉得这种情况很奇怪,因为在我看来,在应用程序中使用多个缓存是一个非常常见的场景。

编辑:更具体地说,我有一个类,它应该为每个实例保留一个缓存。我应该避免使用MemoryCache并寻找不同的缓存解决方案吗?在这种情况下使用MemoryCache是否被认为是糟糕的,如果是,为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-16 22:23:57

我最近也亲自经历过这件事。考虑到内存中的缓存将是特定于进程的(而不是在网站、本地业务应用程序或多台服务器的多个实例之间共享),除了代码组织上的原因(这可以通过其他方式实现)之外,拥有多个MemoryCache实例实际上没有好处。

内存缓存打算单独使用,主要是因为它具有内存管理功能。除了性能计数器(确实有一些开销)外,MemoryCache还可以在分配的内存用完时过期项。

如果缓存的当前实例超过了CacheMemoryLimit属性设置的内存限制,则缓存实现将删除缓存项。应用程序中的每个缓存实例都可以使用CacheMemoryLimit属性指定的内存量。

来自MemoryCache.CacheMemoryLimit性质

通过只使用MemoryCache的一个实例,它可以在整个应用程序实例中有效地应用这种内存管理。在整个应用程序中终止最不重要的项。这确保了最大限度的内存使用,而不超过您的硬件能力。通过限制任何一个MemoryCache的范围(就像类的一个实例),它不能再有效地管理应用程序的内存(因为它不能“看到”所有东西)。如果所有这些缓存都是“繁忙的”,那么管理内存可能会很困难,而且它永远也不会那么高效。

在没有专用服务器的应用程序中,这一点特别敏感。假设您在共享服务器上运行应用程序,在共享服务器上只分配了150 it内存(普通廉价的10美元/月托管),您需要依靠缓存才能最大限度地使用它而不超过它。如果您超过了这个内存使用量,您的应用程序池将被回收,您的应用程序将失去所有内存缓存!(常见的廉价托管方式)同样也适用于在某个共享的公司服务器上内部托管的非web应用程序。同样的,你被告知不要占用机器上的所有内存,并与其他商业应用程序和平共处。

内存限制、应用程序池回收、缓存丢失是网络应用的一个常见的“致命弱点”。当这些应用程序最忙的时候,因为超出内存分配,丢失所有的缓存条目,并因此而重新抓取本应被缓存的大部分工作,所以它们会重设最频繁的程序。这意味着应用程序在最大加载时实际上会失去性能,而不是增加。

我知道MemoryCache是System.Web.Caching.Cache实现的非web版本,但这说明了缓存实现背后的逻辑。如果您没有对硬件的独占使用,同样的逻辑可以应用于非web项目。请记住,如果缓存强制机器开始执行分页文件交换,那么缓存将不再比磁盘上的缓存更快。您总是希望有一个限制,即使这个限制是2gb或什么的。

在我的例子中,在阅读了这篇文章之后,我在我的应用程序中切换到使用一个“公共静态MemoryCache”,我只是通过缓存键隔离缓存项。例如,如果要在每个实例上缓存,则可以拥有类似于"instance-{instanceId}-resourceName-{resourceId}".的缓存键。将其视为名称间隔缓存条目。

希望这能帮上忙!

票数 78
EN

Stack Overflow用户

发布于 2012-08-23 19:44:56

我也用几个。一般每种一种。

查看MemoryCache,我发现它与AppDomain事件挂钩,并维护性能计数器。然后,我怀疑通过使用多个(例如CPU、计数器和内存)就会有一些开销资源,这就是为什么不鼓励它。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8463962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档