1

そのため、ASP.NETアプリケーションでデータベースの負荷を軽減する効果的な方法を検討してきましたが、に遭遇しましたSystem.Web.Mvc.OutputcCacheAttribute。以前に基づいてキャッシュを使用しましたSystem.Web.HttpRuntime.Cacheが、機能的にはほぼ同等のようです。私はそれについて多くの調査を行いました、そして私が見たすべてはあなたがそれを効果的に構成する限りそれをキャッシュ要求のためのある種の銀の弾丸として描写します。これは信じがたいことです。効果的なキャッシュに(ある程度)必要なのは、特定の条件に基づいて出力データを保存することだけだと理解していますが、それでも属性を追加してアプリケーションのパフォーマンスを魔法のように向上させるのは簡単すぎるようです。

ASP.NETで出力キャッシュを使用することの利点/欠点を経験した人はいますか?もしそうなら、キャッシングにこのアプローチを使用することの問題点は何ですか?

4

2 に答える 2

2

キャッシング、レイテンシーをメモリと交換することで、驚異的な効果を発揮します。悪魔は「効果的に構成すること」にあります。

重要なことは、アプリケーションで許容される動作を自分で特定することです。たとえば、フロント ページの「上位 3 件の投稿」が 1 分以内であれば問題ないでしょうか? 「現在オンラインのユーザー」リストが 30 秒以内であれば問題ありませんか? メイン ページの読み込みに 0.75 秒かかっても問題ありませんか、それとももっと速くする必要がありますか? これらの質問に対するあなたの回答によって、何をキャッシュすべきか、何をキャッシュすべきでないかが決まります。アプリケーションのプロファイルを作成して、実際のパフォーマンスのボトルネックがどこにあり、なぜ存在するのかを理解して、最適化/キャッシュの取り組みをどこに集中すべきかを理解します。

.Net アプリケーションで使用できるキャッシュには、さまざまな形式があります。 OutputCacheは単なる 1 つの形式です。

  • アプリケーションレベルのキャッシング (アプリケーション内のすべてで共有 - Application[Key])
  • オブジェクト キャッシング (キャッシュ無効化コールバックで自動的に管理 - Cache[Key])
  • 出力キャッシュ (aspx ページ/パーツの生成された出力のキャッシュ -OutputCacheプロパティ)
  • リクエストごとのキャッシュ (単一のリクエスト中に計算されたデータをキャッシュする - Context[key])
  • セッション キャッシング (ユーザーのセッションに固有のデータをキャッシュする - Session[key])

それらにはすべて長所と短所があり、適切に設計されたアプリケーションは、おそらくこれらの形式のキャッシングのほとんどまたはすべてを利用します。で考慮すべき点がいくつかある場合OutputCacheは、次のとおりです。

  • 再利用できる可能性が高いため、ページ全体ではなくページの一部をキャッシュするようにしてください。のようなコンポーネントからページを構築すると、UserControlここで役立ちます。
  • 項目 ID ごとに異なるパラメーターなど、大きく変化する一連のパラメーターを使用する場合は注意してくださいQueryString。使用頻度の低いキャッシュ コピーが大量に生成され、多くのメモリを消費するだけでメリットがほとんどないためです。
  • OutputCacheASPX マークアップの生成された出力を保存しているだけであることに注意してください。そのため、ユーザー入力に基づいてフォームが変化する動的ページでは、他のキャッシュ タイプと同様に機能しません。
于 2013-01-22T21:02:51.497 に答える
2

私の経験から、この属性について非常に明白で、非常に頻繁に忘れられていることが 1 つあります。

出力がキャッシュされたメソッドは、キャッシュされた後も実行されないという事実です。したがって、アクションの背後にあるコードに何らかの副作用がある場合、それらは実行されません (たとえば、ユーザーがページにアクセスしたという事実をデータベース DB に記録するなど)。

そのため、少なくともいくつかの非常に厄介なバグを見てきました。

短いアドバイス: まばらに使用し、チーム内のすべての開発者がそれがどのように機能するかをよく知っていることを 101% 確信してください。

于 2013-01-22T21:21:52.800 に答える