相关疑难解决方法(0)

防止许多不同的MVC URL填充ASP.NET缓存

我们的网站使用ASP.NET MVC作为其中的一部分页面.这些URL的格式通常为http://oursite/detail.mvc/12345/pictures/在此URL中,12345是数据库中的ID.我们有几十万个对象,我们为其显示详细页面.最近我们注意到该网站的内存使用量有所增加,所以我调查了一下.我们对生产站点进行了内存转储,发现大量的内存使用量是由"dmachine/webroot/1/site/detail.mvc/12345/pictures /"和"H"形式的Cache中的字符串引起的. :\网站\ detail.mvc\12345 \图片\".

进一步研究和大量使用Reflector表明这些字符串以System.Web.CachedPathData对象的形式存储在ASP.NET Cache中.这是ConfigurationManager在从web.config文件中读取信息时创建的.它调用HttpContext.GetSection() - > HttpContext.GetConfigurationPathData() - > CachedPathData.GetVirtualPathData().最后,在CachedPathData.GetConfigPathData中,确定所请求路径的虚拟路径,并将其缓存在ASP.NET缓存中而不会过期.

现在麻烦的是我们有数百万个不同的URL,并且对于每个路径,配置系统在缓存中存储了许多字符串(configPath,虚拟路径,物理路径).随着时间的推移,这些信息消耗几百MB,几乎所有缓存中的数据.

我假设当内存稀缺时,这些条目将被删除,但在操作中,它们不信任增长和增长的进程​​.它似乎也非常低效.有没有办法告诉HttpContext不要为每个唯一的URL缓存此信息?或者我们可以先将请求路径映射到一个更简单的URL,然后用它来选择正确的web.config?

.net memory asp.net asp.net-mvc

6
推荐指数
1
解决办法
617
查看次数

标签 统计

.net ×1

asp.net ×1

asp.net-mvc ×1

memory ×1