Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET内存缓存&;线程阻塞_Asp.net_Multithreading_Memorycache - Fatal编程技术网

ASP.NET内存缓存&;线程阻塞

ASP.NET内存缓存&;线程阻塞,asp.net,multithreading,memorycache,Asp.net,Multithreading,Memorycache,我们有一个大量使用.NET提供的MemoryCache类的应用程序,直到最近,我们的服务器上的一切都运行得很好,但现在我们开始注意到CPU峰值在高峰使用时间时频繁出现 在使用WinDbg分析了一些进程转储之后,出现了一个共同的主题,我认为这与我们使用MemoryCache有关 基本上,我看到的是许多线程被使用TimerQueue对象的一个线程阻塞,我相信它正试图使MemoryCache对象中的一个项目过期 目前,我们为每个用户缓存特定级别的数据库结果,绝对过期时间为10秒。我们所使用的服务器有1

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

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

基本上,我看到的是许多线程被使用TimerQueue对象的一个线程阻塞,我相信它正试图使MemoryCache对象中的一个项目过期

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

因此,如果系统上的并发使用率增加(可能尝试写入缓存),而自动缓存过期线程正在尝试从缓存中删除项目,那么所有这些线程都将被阻止,直到从缓存中删除完成

这个解释似乎准确吗?如果准确,是否有人有改进性能的建议

到目前为止,我仅有的解决方案如下:

  • 添加一些负载平衡以帮助分散使用,并希望避免此问题
  • 将过期阈值提高到30秒,以帮助抵消它
  • 完全使用不同的缓存机制