问题标签 [memorycache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
11 回答
107493 浏览

c# - 如何清除内存缓存?

我使用 MemoryCache 类创建了一个缓存。我向其中添加了一些项目,但是当我需要重新加载缓存时,我想先清除它。最快的方法是什么?我应该遍历所有项目并一次删除它们还是有更好的方法?

0 投票
2 回答
11691 浏览

c# - 如何检查 System.Runtime.Caching.ObjectCache 中的缓存策略?

我正在使用新的 .NET 4.0 缓存命名空间:System.Runtime.Caching.

现在,我只是在做一些原型/摆弄新的 API,以便找出最适合真实应用程序的方法。

与此一致,我正在尝试创建一个页面(ASP.NET MVC),它基本上会转储缓存中的所有内容,尤其是以下信息:

  • 缓存键
  • 缓存对象
  • 缓存策略(到期日期等)
  • 缓存依赖项(如果有)

但是,除了键/对象之外,我似乎什么都得不到。

这是我目前正在玩的代码:

我希望“CacheItem”类能够公开我需要的信息(到期、依赖关系等——至少作为“getter”)。

但事实并非如此。它只有键、值和区域名称的属性。

我如何检查缓存中的项目并吐出我需要的信息?

是否有我缺少的名称空间/类?

编辑

看起来有一个ChangeMonitor类,但同样 - 这不会提供过期信息,它只允许您在缓存项目被删除时订阅事件。

必须有一种方法来获取缓存中的项目以及它们何时过期。

编辑 2

不知道这是否应该是一个单独的问题,而且 - 我对我应该给我的 ObjectCache 的生命周期感到困惑。MSDN 说它不是单例,实际上您可以创建多个 ObjectCache 实例。这意味着什么,我在访问 ObjectCache 实例时必须使用完全锁定的单例?

0 投票
1 回答
671 浏览

.net - System.Runtime.Caching 在使用 OfType 时返回错误计数

我正在向 MemoryCache 添加 3 个 Customer 类型的对象,然后尝试过滤 MemoryCache 以仅检索那些属于 Customer 类型的对象。

执行上述代码后,我期望“客户类型的缓存对象总数”为 3,但它返回 0。

任何人都可以指出我这里有什么问题吗?

0 投票
1 回答
2663 浏览

c# - MemoryCache.Default 使用 LINQ 删除

有没有办法可以使用 LINQ 查询从 MemoryCache.Default 中删除对象,如下所示:

这不会从 MemoryCache.Default 实例中删除对象。

0 投票
3 回答
644 浏览

ruby-on-rails - 何时在 Rails 3 中使用虚拟属性或在哈希中传递数据

在我的应用程序中,我有一个Widget模型,一个Feature具有has_many 通过表关联的模型WidgetFeature

根据要求,当我发送一个 WidgetFeature 对象时,我也应该将 feature_name 附加到它,用于关联的给定功能。
有两种方法:

  1. 发送对象时,请执行以下操作:

然后我可以在我的控制器或视图中访问它,widget_feature_object[:feature_name]因为一个对象有(键,值)对,所以我也可以添加另一个。

2. 在模型中创建feature_name一个虚拟属性WidgetFeature然后为其创建getter 和 setter 方法

据我所知,当您想要创建与模型中实际存在的字段不同的视图时,您应该使用虚拟属性(例如,全名 = 名字 + 姓氏)。
同样的东西也适合这里吗?

另外,Rails 是否对对象进行了一些缓存,当您使用虚拟属性而不是当我使用第一种方法时,这可能会派上用场?

每种方法的优缺点是什么?根据我的要求,哪种方法最适合?非常感谢。

0 投票
2 回答
18393 浏览

c# - MemoryCache.Set() 是线程安全的吗?

MemoryCache.Set的MSDN 文档遗憾地没有明确说明它是否是线程安全的。

在没有显式锁定的情况下使用多个线程.Get()是否安全?.Set()

0 投票
7 回答
41857 浏览

c# - MemoryCache 不遵守配置中的内存限制

我正在使用应用程序中的 .NET 4.0 MemoryCache类并尝试限制最大缓存大小,但在我的测试中,缓存似乎并未真正遵守限制。

我正在使用根据 MSDN应该限制缓存大小的设置:

  1. CacheMemoryLimitMegabytes:对象实例可以增长到的最大内存大小(以 MB 为单位)。”
  2. PhysicalMemoryLimitPercentage “缓存可以使用的物理内存的百分比,表示为1到100的整数值。默认为零,表示MemoryCache实例根据安装的内存量管理自己的内存1计算机。” 1.这并不完全正确——任何低于 4 的值都会被忽略并替换为 4。

我知道这些值是近似值而不是硬限制,因为清除缓存的线程每 x 秒触发一次,并且还取决于轮询间隔和其他未记录的变量。然而,即使考虑到这些差异,当在测试应用程序中一起或单独设置CacheMemoryLimitMegabytesPhysicalMemoryLimitPercentage后,从缓存中逐出第一项时,我看到缓存大小非常不一致。可以肯定的是,我每次测试都运行了 10 次并计算了平均值。

这些是在具有 3GB RAM 的 32 位 Windows 7 PC 上测试以下示例代码的结果。在每次测试中第一次调用CacheItemRemoved()后获取缓存的大小。(我知道缓存的实际大小会比这个大)

这是测试应用程序:

为什么MemoryCache不遵守配置的内存限制?

0 投票
5 回答
23890 浏览

asp.net - MemoryCache Empty :设置后返回 null

我对使用新的 .NET 4 System.Runtime.Caching MemoryCache 的 MVC 3 应用程序有疑问。我注意到,在看似不可预测的时间之后,它会停止缓存内容,并且表现得好像它是空的。考虑一下我直接从 ASP.NET MVC 中的测试视图中获取的这段代码:

当它工作时,可以预见的是“fred”会被打印出来。然而,当问题开始出现时,尽管Set(), 的值为MemoryCache.Default["myname"]null。我可以通过在行上设置断点并使用即时窗口直接设置和读取缓存来证明这一点Response.Write()- 它只是不会设置它并保持为空!让它再次工作的唯一方法是导致 AppDomain 回收。

有趣的是,当应用程序正常工作时,我可以通过断线Response.Write()并运行来引发问题MemoryCache.Default.Dispose()。之后, MemoryCache.Default 本身不是 null (为什么会这样?),但不会保存任何设置。它不会导致任何错误,但不会保存任何内容。

任何人都可以验证并解释吗?正如我相信我已经发现的那样,当应用程序停止自行运行时,有些东西正在处理MemoryCache.Default,但不是我!


更新

好吧,我现在厌倦了这个问题!CLRProfiler 似乎不适用于 MVC 3。SciTech 的 CLR 工具很好 - RedGate ANTS 也是如此。但是他们告诉我的只是 MemoryCache 对象正在被某些东西处理!我还证明(通过时间戳打印)我页面上应该缓存的 PartialView(由 OutputCacheAttribute 指定)在几分钟后停止缓存 - 每次调用页面时都会开始刷新。只是为了澄清环境,我直接在运行 Win 7 Ultimate 的开发工作站上的 IIS 7.5 服务器上运行。上面提到的内存工具表明我只使用了大约 9mb 的内存来播放对象。

绝望中,我将缓存代码更改为首先搜索环境 HttpContext 以连接并使用其缓存功能(如果可用)。早期的测试表明这是可靠的,但感觉就像一个讨厌的黑客。

我感觉 MemoryCache 和 OutputCache 不能与 MVC 3 一起使用...

0 投票
2 回答
526 浏览

c# - Pre .NET 4 内存缓存

我想使用新的 MemoryCache 类,但我还没有使用 .NET 4。我确实有一个简单的缓存类(内部使用字典)。像 MemoryCache 这样使用此类的好方法是什么?有谁知道在应用程序(非 asp.net)的整个生命周期中如何管理 MemoryCache?

0 投票
3 回答
3173 浏览

linux - “内存缓存”和“内存池”的区别

通过阅读“understanding linux network internals”和“understanding linux kernel”这两本书以及其他参考资料,我很困惑,需要对“内存缓存”和“内存池”技术进行一些澄清。

1)它们是相同的还是不同的技术?

2)如果不相同,是什么造成了差异或不同的目标?

3) 另外,Slab Allocator是怎么进来的?