6

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

任何碰巧知道我该怎么做的人?

4

1 回答 1

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()

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

于 2013-05-28T13:25:33.513 回答