6

属性で装飾された ASP.NET MVC アクションがありOutputCacheますが、MiniProfiler の出力もキャッシュされるという問題があります。MiniProfiler の出力をキャッシュ (ドーナツ ホール) から除外したいのですが、MiniProfiler.RenderIncludes() のような呼び出しを除外する方法がわかりません。

どうすればこれができるか知っている人はいますか?

4

1 に答える 1

6

MiniProfiler を本番環境で使用する場合、これは重要なポイントです。ページへの最初のアクセスが MiniProfiler が有効になっているユーザーによるものであるかのように、以降のすべてのリクエストには MiniProfiler の結果が DOM に含まれます (現在はキャッシュされているため)。結果が不正確になるだけでなく (最初の読み込みのみが考慮されるため)、すべての訪問者が 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 に答える