Asp.net mvc ASP.NET MVC:包含不可缓存部分的缓存

Asp.net mvc ASP.NET MVC:包含不可缓存部分的缓存,asp.net-mvc,caching,Asp.net Mvc,Caching,我有一个很重的页面被缓存了。这对于匿名用户来说是可以的。他们都看到同一页 此问题适用于已登录的用户。他们应该在每次请求时重新呈现页面的小部分(如页面内容的个人注释等) 但仍然应该缓存页面的所有其余部分(在呈现时它会执行大量SQL和计算) 作为一种解决方法,我在页面模板中放置了占位符(如#var1#、#var2#、…)。 然后我使用controller方法将视图渲染为字符串,在这里我将string.Replace#var1#和其他值转换为实际值 任何更干净的方法来实现这种部分“非缓存”?这称为甜甜

我有一个很重的页面被缓存了。这对于匿名用户来说是可以的。他们都看到同一页

此问题适用于已登录的用户。他们应该在每次请求时重新呈现页面的小部分(如页面内容的个人注释等) 但仍然应该缓存页面的所有其余部分(在呈现时它会执行大量SQL和计算)

作为一种解决方法,我在页面模板中放置了占位符(如#var1#、#var2#、…)。 然后我使用controller方法将视图渲染为字符串,在这里我将string.Replace#var1#和其他值转换为实际值


任何更干净的方法来实现这种部分“非缓存”?

这称为甜甜圈缓存


ASP.Net MVC框架目前不支持它,但计划在版本3中使用。

首先,浏览一下页面,看看是否有什么可以简化或减轻重量的地方。根据情况有多糟糕,在这里投资一段时间可能会有长期回报

这就是说,对于尝试将内容发送给匿名用户和登录用户,一个选项是使用两个版本的页面:一个用于匿名用户,另一个用于登录用户。这可能不是最好的方法,因为这意味着您现在要维护同一页面的两个版本


由于缺少对甜甜圈缓存的支持,我可能会尝试缓存正在为页面执行的计算的结果(例如,如果要查询数据库中的数据表,请缓存可以在运行操作之前检查的数据表),并查看这对性能的影响。这可能不是世界上最优雅的解决方案,但它可能会解决您遇到的问题。

如果您使用MVC1,这可能会很有用:@Nik-根据评论,这是为ASP.NET MVC 2更新的,尽管可能有点缺陷。谢谢@Rob,期待在v3中实现无缺陷!通过ajax在页面加载中提供个性化的服务,您可能会得到一些启发。。。