首页 > 解决方案 > ASP.NET 内存缓存和线程阻塞

问题描述

我们有一个应用程序大量使用了 .NET 提供的 MemoryCache 类,直到最近,我们的服务器上的一切都运行良好,但现在我们开始注意到在高峰使用时间期间经常出现 CPU 峰值。

在用 WinDbg 分析了一些进程转储之后,出现了一个共同的主题,我认为这与我们对 MemoryCache 的使用有关。

基本上,我看到的是一个线程使用 TimerQueue 对象阻塞了许多线程,我认为这是试图使 MemoryCache 对象中的一个项目过期。

目前,我们为每个用户缓存一定级别的数据库结果,绝对过期时间为 10 秒。我们所在的服务器有 16 个内核,我认为这足以处理相当数量的并发性。

所以看起来正在发生的事情是,如果我们在系统上的并发使用量增加(可能试图写入缓存),而自动缓存到期线程试图从缓存中删除一个项目,所有这些线程将在从缓存中删除完成之前被阻止?

这种解释看起来是否准确,如果是,是否有人提出改进性能的建议?

到目前为止,我唯一的解决方案如下:

标签: asp.netmultithreadingmemorycache

解决方案


推荐阅读