1

在调查慢速视图渲染的过程中,我查看了“视图”选项卡并试图找出哪些用户控件被缓存,哪些没有。

通常第一个条目显示如下:

| 路径 | 检查缓存 | 发现 | 详情 |
|--------------------------|-------------|-------- |--------------------|
|~/Path/To/UserControl.ascx| 真实 | 假 | 在缓存中找不到 |
|~/Path/To/UserControl.ascx| 假 | 真实 | 关键 | 价值 |

无论任何缓存指令如何,所有用户控件都以相同的方式出现,例如:

OutputCache Duration="3600" VaryByParam="none" Shared="True"

是一瞥坏了还是我搞砸了输出缓存指令?

4

1 回答 1

5

Glimpse 中的“检查缓存”列与视图引擎的缓存有关 - 而不是输出缓存。

例如,给定这个(不太详细的)输出:

Ordinal | Requested View | View Engine | Check Cache | Found
--------|----------------|-------------|-------------|------
1       | Index          | WebForms    | true        | false
2       | Index          | Razor       | true        | false
3       | Index          | WebForms    | false       | false
4       | Index          | Razor       | false       | **true**

MVC 正在做的和 Glimpse 试图展示的是:

  1. 要求第一个注册的视图引擎(WebForms)在其内部缓存中检查一个名为的视图Index- 但它无法找到该视图(这就是“找到”的原因false)。
  2. MVC 没有放弃。然后它要求下一个注册的视图引擎(Razor)在其内部缓存中检查一个名为的视图Index- 但它也无法找到该视图。
  3. MVC 继续保持不变,并返回到第一个视图引擎(WebForms),请求Index直接调用的视图,而不是来自缓存。对于 WebForms,这意味着*.aspx在磁盘上查找文件 - 但未找到视图。
  4. 最后,MVC 再次要求 Razor 查找视图(这次检查磁盘上的 *.cshtml 文件)并找到了视图。

在 Glimpse 网站上有更多关于视图选项卡的信息。

我希望这有帮助!

注意:当 ASP.NET 处于调试模式时,WebForms 和 Razor 永远不会缓存它们的视图。

于 2013-08-22T16:34:34.400 回答