甜甜圈洞缓存 - 排除MiniProfiler.RenderIncludes

时间:2012-12-15 14:23:41

标签: asp.net-mvc mvc-mini-profiler donut-caching

我有一个用OutputCache属性修饰的ASP.NET MVC操作,但问题是MiniProfiler输出也被缓存了。我想从缓存(甜甜圈洞)中排除MiniProfiler输出,但我不确定如何排除像MiniProfiler.RenderIncludes()这样的调用。

任何碰巧知道如何做到这一点的人?

1 个答案:

答案 0 :(得分:6)

如果在生产中使用MiniProfiler,这一点非常重要。好像第一次访问页面是由启用了MiniProfiler的用户,所有后续请求都将在DOM中包含MiniProfiler结果(因为它们现在被缓存)。结果不仅不正确(因为他们只考虑首次加载),但所有访问者都能看到您的MiniProfiler结果。

首先,为了启用甜甜圈洞缓存,我正在使用:

http://mvcdonutcaching.codeplex.com/

这允许您添加在使用OutputCache时不会缓存的操作。

鉴于上述情况,您可以从“布局”页面中删除@using StackExchange.Profiling;。然后你可以替换:

@MiniProfiler.RenderIncludes()

使用:

@Html.Action("MiniProfiler", "DoNotCache", excludeFromParentCache: true)

我创建了一个DoNotCache控制器,所以我的所有非可缓存元素都在一起,但这不是必需的,您可以将此操作放在任何控制器中。

 public ActionResult MiniProfiler()
 {
      return View();
 }

然后视图本身看起来像:

@using StackExchange.Profiling;
@{
    Layout = null;
}
@MiniProfiler.RenderIncludes()

这将确保MiniProfiler结果在适当时显示,即使在使用DonutOutputCache注释的地方也不会在生产中缓存。