首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CacheManager GetData性能问题

CacheManager GetData性能问题
EN

Stack Overflow用户
提问于 2012-06-21 19:48:05
回答 1查看 589关注 0票数 0

我们使用的是企业库5和它在我们的web应用程序中提供的CacheManager。直到我们开始对应用程序进行沉重的负载测试时,一切似乎都很好。

我们使用基于ID的密钥从数据库中缓存记录,而不是一直从缓存中请求一个项,有时我们需要从缓存中获取项目列表。为此,我们有一个LINQ查询,它生成一个选择(e => CacheManager.GetData(id_from_list)),并从缓存返回项列表。大多数情况下,这很好,但在重载时,由于缓存管理器在缓存的读写操作中执行锁定,GetData方法成为瓶颈。基本上只有一个线程可以一次从缓存中读取数据。我们确实根据条目的类型创建了几个缓存管理器--这允许多个线程从不同的缓存管理器中获取数据,但当沉重的负载击中应用程序(每个缓存管理器有一个瓶颈)时,问题仍然存在--当然,它在一定程度上改善了应用程序,但还不够。

有没有其他人遇到过同样的问题,你有没有找到解决这个问题的方法?

注意:我们尝试缓存项目列表,并从列表中的项目in中组合密钥。这实际上解决了问题,cachemanager.getdata不再是瓶颈.但是..。显然,这不是一个很好的解决方案,因为我们可以在很多列表中将每一项数千次地放在缓存中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-26 18:39:31

您可以考虑调整CacheManager以使用读/写锁(我认为它更适合这种情况),而不是它现在使用的独占锁定。

http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx

基本上,当多个读取器线程需要同时访问数据时,读/写锁是合适的,而且只有写的出现才会导致传入读取器阻塞。

然而,当加载时,它们还会出现其他问题,例如编写饥饿。根据读/写锁实现的不同,写总是等待所有的读取先完成--有了持续的读流,写就永远不会有机会发生。

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

https://stackoverflow.com/questions/11145682

复制
相关文章

相似问题

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