1

遅いビューのレンダリングを調査する過程で、「ビュー」タブを見て、どのユーザー コントロールがキャッシュされ、どのユーザー コントロールがキャッシュされていないかを把握しようとしていました。

通常、最初のエントリは次のように表示されます。

| | パス | キャッシュをチェック | 見つかりました | 詳細 |
|-------------------------|-------------|-------- |--------------------|
|~/Path/To/UserControl.ascx| 真 | 偽 | キャッシュに見つかりません |
|~/Path/To/UserControl.ascx| 偽 | 真 | キー | 値 |

次のようなキャッシュ ディレクティブに関係なく、すべてのユーザー コントロールは同じように表示されます。

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

glimpse は壊れていますか、それとも出力キャッシュ ディレクティブに問題がありますか?

4

1 に答える 1

5

Glimpse の「Check Cache」列は、出力キャッシュではなく、ビュー エンジンのキャッシュに関係しています。

たとえば、次の (あまり詳細ではない) 出力があるとします。

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ますが、そのビューを見つけることができませんでした (これが "Found" が である理由ですfalse)。
  2. MVC はあきらめません。次に、登録されている次のビュー エンジン (Razor) に、呼び出されたビューの内部キャッシュをチェックするように要求しIndexますが、そのビューを見つけることもできませんでした。
  3. MVC は引き続き永続的であり、最初のビュー エンジン (WebForms) に戻り、Indexキャッシュからではなく、直接呼び出されたビューを要求します。*.aspxWebForms の場合、これはディスク上のファイルを探すことを意味しますが、ビューが見つかりませんでした。
  4. 最後に、MVC は Razor にビューを見つけるように再度要求し (今回はディスク上の *.cshtml ファイルをチェックします)、ビューが見つかります。

Glimpse サイトのビュー タブについてもう少し詳しい情報があります。

これが役立つことを願っています!

注: ASP.NET がデバッグ モードの場合、WebForms と Razor はビューをキャッシュしません。

于 2013-08-22T16:34:34.400 に答える